提交 07e1c2bd 编写于 作者: A alanb

Merge

...@@ -79,3 +79,6 @@ d58354a69011f3d3354765fa3167567c4c4a9612 jdk7-b101 ...@@ -79,3 +79,6 @@ d58354a69011f3d3354765fa3167567c4c4a9612 jdk7-b101
13029a61b16bec06535d4f0aa98229b358684128 jdk7-b102 13029a61b16bec06535d4f0aa98229b358684128 jdk7-b102
6488b70a23cc6dc4b7e00809bc503c2884bafb28 jdk7-b103 6488b70a23cc6dc4b7e00809bc503c2884bafb28 jdk7-b103
1a92820132a0221c5bdedd42d0888c57ce4cbb34 jdk7-b104 1a92820132a0221c5bdedd42d0888c57ce4cbb34 jdk7-b104
3b0abcb512807bb6f6d27755bc50103211bde6ee jdk7-b105
b91ef6b60f4e19bf4592c6dd594c9bac62487519 jdk7-b106
882103f334bb23745d3fd70fb7928c347478b0f4 jdk7-b107
...@@ -21,4 +21,4 @@ ...@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any # or visit www.oracle.com if you need additional information or have any
# questions. # questions.
# #
tzdata2010i tzdata2010l
...@@ -316,8 +316,25 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 - ...@@ -316,8 +316,25 @@ Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
# and can be found by searching for "winter" in their search engine # and can be found by searching for "winter" in their search engine
# (at least today). # (at least today).
# From Alexander Krivenyshev (2010-07-20):
# According to News from Egypt - Al-Masry Al-Youm Egypt's cabinet has
# decided that Daylight Saving Time will not be used in Egypt during
# Ramadan.
#
# Arabic translation:
# "Clocks to go back during Ramadan--and then forward again"
# <a href="http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again">
# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again
# </a>
# or
# <a href="http://www.worldtimezone.com/dst_news/dst_news_egypt02.html">
# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html
# </a>
Rule Egypt 2008 only - Aug lastThu 23:00s 0 - Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
Rule Egypt 2009 only - Aug 20 23:00s 0 - Rule Egypt 2009 only - Aug 20 23:00s 0 -
Rule Egypt 2010 only - Aug 11 0:00 0 -
Rule Egypt 2010 only - Sep 10 0:00 1:00 S
Rule Egypt 2010 max - Sep lastThu 23:00s 0 - Rule Egypt 2010 max - Sep lastThu 23:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL] # Zone NAME GMTOFF RULES FORMAT [UNTIL]
......
...@@ -2200,6 +2200,18 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 ...@@ -2200,6 +2200,18 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# "At 12:01am Friday, clocks in Israel and the West Bank will change to # "At 12:01am Friday, clocks in Israel and the West Bank will change to
# 1:01am, while Gaza clocks will change at 12:01am Saturday morning." # 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
# From Steffen Thorsen (2010-08-11):
# According to several sources, including
# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=306795">
# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795
# </a>
# the clocks were set back one hour at 2010-08-11 00:00:00 local time in
# Gaza and the West Bank.
# Some more background info:
# <a href="http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html">
# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html
# </a>
# The rules for Egypt are stolen from the `africa' file. # The rules for Egypt are stolen from the `africa' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
...@@ -2220,6 +2232,7 @@ Rule Palestine 2008 only - Aug lastFri 2:00 0 - ...@@ -2220,6 +2232,7 @@ Rule Palestine 2008 only - Aug lastFri 2:00 0 -
Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S
Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S
Rule Palestine 2009 max - Sep Fri>=1 2:00 0 - Rule Palestine 2009 max - Sep Fri>=1 2:00 0 -
Rule Palestine 2010 only - Aug 11 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL] # Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
......
...@@ -368,10 +368,10 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901 ...@@ -368,10 +368,10 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
# Micronesia # Micronesia
# Zone NAME GMTOFF RULES FORMAT [UNTIL] # Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Truk 10:07:08 - LMT 1901 Zone Pacific/Chuuk 10:07:08 - LMT 1901
10:00 - TRUT # Truk Time 10:00 - CHUT # Chuuk Time
Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia
11:00 - PONT # Ponape Time 11:00 - PONT # Pohnpei Time
Zone Pacific/Kosrae 10:51:56 - LMT 1901 Zone Pacific/Kosrae 10:51:56 - LMT 1901
11:00 - KOST 1969 Oct # Kosrae Time 11:00 - KOST 1969 Oct # Kosrae Time
12:00 - KOST 1999 12:00 - KOST 1999
......
...@@ -112,7 +112,9 @@ Link Pacific/Chatham NZ-CHAT ...@@ -112,7 +112,9 @@ Link Pacific/Chatham NZ-CHAT
Link America/Denver Navajo Link America/Denver Navajo
Link Asia/Shanghai PRC Link Asia/Shanghai PRC
Link Pacific/Pago_Pago Pacific/Samoa Link Pacific/Pago_Pago Pacific/Samoa
Link Pacific/Truk Pacific/Yap Link Pacific/Chuuk Pacific/Yap
Link Pacific/Chuuk Pacific/Truk
Link Pacific/Pohnpei Pacific/Ponape
Link Europe/Warsaw Poland Link Europe/Warsaw Poland
Link Europe/Lisbon Portugal Link Europe/Lisbon Portugal
Link Asia/Taipei ROC Link Asia/Taipei ROC
......
...@@ -1035,22 +1035,47 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880 ...@@ -1035,22 +1035,47 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
2:00 EU EE%sT 2:00 EU EE%sT
# Finland # Finland
#
# From Hannu Strang (1994-09-25 06:03:37 UTC): # From Hannu Strang (1994-09-25 06:03:37 UTC):
# Well, here in Helsinki we're just changing from summer time to regular one, # Well, here in Helsinki we're just changing from summer time to regular one,
# and it's supposed to change at 4am... # and it's supposed to change at 4am...
# From Janne Snabb (2010-0715):
# #
# From Paul Eggert (2006-03-22): # I noticed that the Finland data is not accurate for years 1981 and 1982.
# Shanks & Pottenger say Finland has switched at 02:00 standard time # During these two first trial years the DST adjustment was made one hour
# since 1981. Go with Strang instead. # earlier than in forthcoming years. Starting 1983 the adjustment was made
# according to the central European standards.
#
# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac
# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in
# Finnish) at
#
# <a href="http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf">
# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf
# </a>
#
# Page 105 (56 in PDF version) has a handy table of all past daylight savings
# transitions. It is easy enough to interpret without Finnish skills.
#
# This is also confirmed by Finnish Broadcasting Company's archive at:
# #
# <a href="http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401">
# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401
# </a>
#
# The news clip from 1981 says that "the time between 2 and 3 o'clock does not
# exist tonight."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Finland 1942 only - Apr 3 0:00 1:00 S Rule Finland 1942 only - Apr 3 0:00 1:00 S
Rule Finland 1942 only - Oct 3 0:00 0 - Rule Finland 1942 only - Oct 3 0:00 0 -
Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S
Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL] # Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
1:39:52 - HMT 1921 May # Helsinki Mean Time 1:39:52 - HMT 1921 May # Helsinki Mean Time
2:00 Finland EE%sT 1981 Mar 29 2:00 2:00 Finland EE%sT 1983
2:00 EU EE%sT 2:00 EU EE%sT
# Aaland Is # Aaland Is
......
...@@ -82,9 +82,9 @@ Leap 2008 Dec 31 23:59:60 + S ...@@ -82,9 +82,9 @@ Leap 2008 Dec 31 23:59:60 + S
# FAX : 33 (0) 1 40 51 22 91 # FAX : 33 (0) 1 40 51 22 91
# Internet : services.iers@obspm.fr # Internet : services.iers@obspm.fr
# #
# Paris, 4 July 2009 # Paris, 14 July 2010
# #
# Bulletin C 38 # Bulletin C 40
# #
# To authorities responsible # To authorities responsible
# for the measurement and # for the measurement and
...@@ -92,7 +92,7 @@ Leap 2008 Dec 31 23:59:60 + S ...@@ -92,7 +92,7 @@ Leap 2008 Dec 31 23:59:60 + S
# #
# INFORMATION ON UTC - TAI # INFORMATION ON UTC - TAI
# #
# NO positive leap second will be introduced at the end of December 2009. # NO positive leap second will be introduced at the end of December 2010.
# The difference between Coordinated Universal Time UTC and the # The difference between Coordinated Universal Time UTC and the
# International Atomic Time TAI is : # International Atomic Time TAI is :
# #
......
...@@ -1346,6 +1346,83 @@ Zone America/Montreal -4:54:16 - LMT 1884 ...@@ -1346,6 +1346,83 @@ Zone America/Montreal -4:54:16 - LMT 1884
# entry since our cutoff date of 1970, so we can move # entry since our cutoff date of 1970, so we can move
# America/Coral_Harbour to the 'backward' file. # America/Coral_Harbour to the 'backward' file.
# From Mark Brader (2010-03-06):
#
# Currently the database has:
#
# # Ontario
#
# # From Paul Eggert (2006-07-09):
# # Shanks & Pottenger write that since 1970 most of Ontario has been like
# # Toronto.
# # Thunder Bay skipped DST in 1973.
# # Many smaller locales did not observe peacetime DST until 1974;
# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
#
# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom
# right corner of page 1, it says that Toronto will return to standard
# time at 2 am Sunday morning (which agrees with the database), and that:
#
# The one-hour setback will go into effect throughout most of Ontario,
# except in areas like Windsor which remains on standard time all year.
#
# Windsor is, of course, a lot larger than Nipigon.
#
# I only came across this incidentally. I don't know if Windsor began
# observing DST when Detroit did, or in 1974, or on some other date.
#
# By the way, the article continues by noting that:
#
# Some cities in the United States have pushed the deadline back
# three weeks and will change over from daylight saving in October.
# From Arthur David Olson (2010-07-17):
#
# "Standard Time and Time Zones in Canada" appeared in
# The Journal of The Royal Astronomical Society of Canada,
# volume 26, number 2 (February 1932) and, as of 2010-07-17,
# was available at
# <a href="http://adsabs.harvard.edu/full/1932JRASC..26...49S">
# http://adsabs.harvard.edu/full/1932JRASC..26...49S
# </a>
#
# It includes the text below (starting on page 57):
#
# A list of the places in Canada using daylight saving time would
# require yearly revision. From information kindly furnished by
# the provincial governments and by the postmasters in many cities
# and towns, it is found that the following places used daylight sav-
# ing in 1930. The information for the province of Quebec is definite,
# for the other provinces only approximate:
#
# Province Daylight saving time used
# Prince Edward Island Not used.
# Nova Scotia In Halifax only.
# New Brunswick In St. John only.
# Quebec In the following places:
# Montreal Lachine
# Quebec Mont-Royal
# Levis Iberville
# St. Lambert Cap de la Madeleine
# Verdun Loretteville
# Westmount Richmond
# Outremont St. Jerome
# Longueuil Greenfield Park
# Arvida Waterloo
# Chambly-Canton Beaulieu
# Melbourne La Tuque
# St. Theophile Buckingham
# Ontario Used generally in the cities and towns along
# the southerly part of the province. Not
# used in the northwesterlhy part.
# Manitoba Not used.
# Saskatchewan In Regina only.
# Alberta Not used.
# British Columbia Not used.
#
# With some exceptions, the use of daylight saving may be said to be limited
# to those cities and towns lying between Quebec city and Windsor, Ont.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Toronto 1919 only - Mar 30 23:30 1:00 D Rule Toronto 1919 only - Mar 30 23:30 1:00 D
Rule Toronto 1919 only - Oct 26 0:00 0 S Rule Toronto 1919 only - Oct 26 0:00 0 S
...@@ -2111,7 +2188,44 @@ Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08 ...@@ -2111,7 +2188,44 @@ Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
-8:00 - PST 1970 -8:00 - PST 1970
-7:00 Mexico M%sT 1999 -7:00 Mexico M%sT 1999
-7:00 - MST -7:00 - MST
# From Alexander Krivenyshev (2010-04-21):
# According to news, Bah&iacute;a de Banderas (Mexican state of Nayarit)
# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to
# share the same time zone as nearby city Puerto Vallarta, Jalisco).
#
# (Spanish)
# Bah&iacute;a de Banderas homologa su horario al del centro del
# pa&iacute;s, a partir de este domingo
# <a href="http://www.nayarit.gob.mx/notes.asp?id=20748">
# http://www.nayarit.gob.mx/notes.asp?id=20748
# </a>
#
# Bah&iacute;a de Banderas homologa su horario con el del Centro del
# Pa&iacute;s
# <a href="http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50">
# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50"
# </a>
#
# (English)
# Puerto Vallarta and Bah&iacute;a de Banderas: One Time Zone
# <a href="http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml">
# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml
# </a>
#
# or
# <a href="http://www.worldtimezone.com/dst_news/dst_news_mexico08.html">
# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html
# </a>
#
# "Mexico's Senate approved the amendments to the Mexican Schedule System that
# will allow Bah&iacute;a de Banderas and Puerto Vallarta to share the same time
# zone ..."
# Baja California Sur, Nayarit, Sinaloa # Baja California Sur, Nayarit, Sinaloa
# From Arthur David Olson (2010-05-01):
# Use "Bahia_Banderas" to keep the name to fourteen characters.
Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
-7:00 - MST 1927 Jun 10 23:00 -7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15 -6:00 - CST 1930 Nov 15
...@@ -2122,6 +2236,19 @@ Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20 ...@@ -2122,6 +2236,19 @@ Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
-7:00 - MST 1949 Jan 14 -7:00 - MST 1949 Jan 14
-8:00 - PST 1970 -8:00 - PST 1970
-7:00 Mexico M%sT -7:00 Mexico M%sT
Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
-7:00 - MST 1931 May 1 23:00
-6:00 - CST 1931 Oct
-7:00 - MST 1932 Apr 1
-6:00 - CST 1942 Apr 24
-7:00 - MST 1949 Jan 14
-8:00 - PST 1970
-7:00 Mexico M%sT 2010 Apr 4 2:00
-6:00 Mexico C%sT
# Baja California (near US border) # Baja California (near US border)
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56 Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-7:00 - MST 1924 -7:00 - MST 1924
......
...@@ -199,8 +199,8 @@ ET +0902+03842 Africa/Addis_Ababa ...@@ -199,8 +199,8 @@ ET +0902+03842 Africa/Addis_Ababa
FI +6010+02458 Europe/Helsinki FI +6010+02458 Europe/Helsinki
FJ -1808+17825 Pacific/Fiji FJ -1808+17825 Pacific/Fiji
FK -5142-05751 Atlantic/Stanley FK -5142-05751 Atlantic/Stanley
FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
FM +0658+15813 Pacific/Ponape Ponape (Pohnpei) FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
FM +0519+16259 Pacific/Kosrae Kosrae FM +0519+16259 Pacific/Kosrae Kosrae
FO +6201-00646 Atlantic/Faroe FO +6201-00646 Atlantic/Faroe
FR +4852+00220 Europe/Paris FR +4852+00220 Europe/Paris
...@@ -310,6 +310,7 @@ MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border ...@@ -310,6 +310,7 @@ MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas
MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
MY +0133+11020 Asia/Kuching Sabah & Sarawak MY +0133+11020 Asia/Kuching Sabah & Sarawak
MZ -2558+03235 Africa/Maputo MZ -2558+03235 Africa/Maputo
......
...@@ -45,7 +45,7 @@ public class TTYResources extends java.util.ListResourceBundle { ...@@ -45,7 +45,7 @@ public class TTYResources extends java.util.ListResourceBundle {
* @return the contents of this <code>ResourceBundle</code>. * @return the contents of this <code>ResourceBundle</code>.
*/ */
public Object[][] getContents() { public Object[][] getContents() {
return new Object[][] { Object[][] temp = new Object[][] {
// NOTE: The value strings in this file containing "{0}" are // NOTE: The value strings in this file containing "{0}" are
// processed by the java.text.MessageFormat class. Any // processed by the java.text.MessageFormat class. Any
// single quotes appearing in these strings need to be // single quotes appearing in these strings need to be
...@@ -449,5 +449,7 @@ public class TTYResources extends java.util.ListResourceBundle { ...@@ -449,5 +449,7 @@ public class TTYResources extends java.util.ListResourceBundle {
"For command help type ''help'' at {0} prompt"}, "For command help type ''help'' at {0} prompt"},
// END OF MATERIAL TO LOCALIZE // END OF MATERIAL TO LOCALIZE
}; };
return temp;
} }
} }
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -946,7 +946,6 @@ public class JTable extends JComponent implements TableModelListener, Scrollable ...@@ -946,7 +946,6 @@ public class JTable extends JComponent implements TableModelListener, Scrollable
/** /**
* Returns the height of a table row, in pixels. * Returns the height of a table row, in pixels.
* The default row height is 16.0.
* *
* @return the height in pixels of a table row * @return the height in pixels of a table row
* @see #setRowHeight * @see #setRowHeight
......
...@@ -29,7 +29,7 @@ import java.util.ListResourceBundle; ...@@ -29,7 +29,7 @@ import java.util.ListResourceBundle;
public class MsgAppletViewer extends ListResourceBundle { public class MsgAppletViewer extends ListResourceBundle {
public Object[][] getContents() { public Object[][] getContents() {
return new Object[][] { Object[][] temp = new Object[][] {
{"textframe.button.dismiss", "Dismiss"}, {"textframe.button.dismiss", "Dismiss"},
{"appletviewer.tool.title", "Applet Viewer: {0}"}, {"appletviewer.tool.title", "Applet Viewer: {0}"},
{"appletviewer.menu.applet", "Applet"}, {"appletviewer.menu.applet", "Applet"},
...@@ -197,5 +197,7 @@ public class MsgAppletViewer extends ListResourceBundle { ...@@ -197,5 +197,7 @@ public class MsgAppletViewer extends ListResourceBundle {
{"appletsecurityexception.checkread.unknown", "unknown class loader type. unable to check for checking read {0}"}, {"appletsecurityexception.checkread.unknown", "unknown class loader type. unable to check for checking read {0}"},
{"appletsecurityexception.checkconnect.unknown", "unknown class loader type. unable to check for checking connect"}, {"appletsecurityexception.checkconnect.unknown", "unknown class loader type. unable to check for checking connect"},
}; };
return temp;
} }
} }
...@@ -36,117 +36,71 @@ package sun.java2d.pisces; ...@@ -36,117 +36,71 @@ package sun.java2d.pisces;
* semantics are unclear. * semantics are unclear.
* *
*/ */
public class Dasher extends LineSink { public class Dasher implements LineSink {
private final LineSink output;
private final float[] dash;
private final float startPhase;
private final boolean startDashOn;
private final int startIdx;
LineSink output; private final float m00, m10, m01, m11;
int[] dash; private final float det;
int startPhase;
boolean startDashOn;
int startIdx;
int idx; private boolean firstDashOn;
boolean dashOn; private boolean starting;
int phase;
int sx, sy; private int idx;
int x0, y0; private boolean dashOn;
private float phase;
int m00, m01; private float sx, sy;
int m10, m11; private float x0, y0;
private float sx1, sy1;
Transform4 transform;
boolean symmetric;
long ldet;
boolean firstDashOn;
boolean starting;
int sx1, sy1;
/**
* Empty constructor. <code>setOutput</code> and
* <code>setParameters</code> must be called prior to calling any
* other methods.
*/
public Dasher() {}
/** /**
* Constructs a <code>Dasher</code>. * Constructs a <code>Dasher</code>.
* *
* @param output an output <code>LineSink</code>. * @param output an output <code>LineSink</code>.
* @param dash an array of <code>int</code>s containing the dash * @param dash an array of <code>int</code>s containing the dash pattern
* pattern in S15.16 format. * @param phase an <code>int</code> containing the dash phase
* @param phase an <code>int</code> containing the dash phase in
* S15.16 format.
* @param transform a <code>Transform4</code> object indicating * @param transform a <code>Transform4</code> object indicating
* the transform that has been previously applied to all incoming * the transform that has been previously applied to all incoming
* coordinates. This is required in order to compute dash lengths * coordinates. This is required in order to compute dash lengths
* properly. * properly.
*/ */
public Dasher(LineSink output, public Dasher(LineSink output,
int[] dash, int phase, float[] dash, float phase,
Transform4 transform) { float a00, float a01, float a10, float a11) {
setOutput(output);
setParameters(dash, phase, transform);
}
/**
* Sets the output <code>LineSink</code> of this
* <code>Dasher</code>.
*
* @param output an output <code>LineSink</code>.
*/
public void setOutput(LineSink output) {
this.output = output;
}
/**
* Sets the parameters of this <code>Dasher</code>.
*
* @param dash an array of <code>int</code>s containing the dash
* pattern in S15.16 format.
* @param phase an <code>int</code> containing the dash phase in
* S15.16 format.
* @param transform a <code>Transform4</code> object indicating
* the transform that has been previously applied to all incoming
* coordinates. This is required in order to compute dash lengths
* properly.
*/
public void setParameters(int[] dash, int phase,
Transform4 transform) {
if (phase < 0) { if (phase < 0) {
throw new IllegalArgumentException("phase < 0 !"); throw new IllegalArgumentException("phase < 0 !");
} }
this.output = output;
// Normalize so 0 <= phase < dash[0] // Normalize so 0 <= phase < dash[0]
int idx = 0; int idx = 0;
dashOn = true; dashOn = true;
int d; float d;
while (phase >= (d = dash[idx])) { while (phase >= (d = dash[idx])) {
phase -= d; phase -= d;
idx = (idx + 1) % dash.length; idx = (idx + 1) % dash.length;
dashOn = !dashOn; dashOn = !dashOn;
} }
this.dash = new int[dash.length]; this.dash = dash;
for (int i = 0; i < dash.length; i++) {
this.dash[i] = dash[i];
}
this.startPhase = this.phase = phase; this.startPhase = this.phase = phase;
this.startDashOn = dashOn; this.startDashOn = dashOn;
this.startIdx = idx; this.startIdx = idx;
this.transform = transform; m00 = a00;
m01 = a01;
this.m00 = transform.m00; m10 = a10;
this.m01 = transform.m01; m11 = a11;
this.m10 = transform.m10; det = m00 * m11 - m01 * m10;
this.m11 = transform.m11;
this.ldet = ((long)m00*m11 - (long)m01*m10) >> 16;
this.symmetric = (m00 == m11 && m10 == -m01);
} }
public void moveTo(int x0, int y0) { public void moveTo(float x0, float y0) {
output.moveTo(x0, y0); output.moveTo(x0, y0);
this.idx = startIdx; this.idx = startIdx;
this.dashOn = this.startDashOn; this.dashOn = this.startDashOn;
...@@ -160,7 +114,7 @@ public class Dasher extends LineSink { ...@@ -160,7 +114,7 @@ public class Dasher extends LineSink {
output.lineJoin(); output.lineJoin();
} }
private void goTo(int x1, int y1) { private void goTo(float x1, float y1) {
if (dashOn) { if (dashOn) {
if (starting) { if (starting) {
this.sx1 = x1; this.sx1 = x1;
...@@ -180,52 +134,64 @@ public class Dasher extends LineSink { ...@@ -180,52 +134,64 @@ public class Dasher extends LineSink {
this.y0 = y1; this.y0 = y1;
} }
public void lineTo(int x1, int y1) { public void lineTo(float x1, float y1) {
while (true) { // The widened line is squished to a 0 width one, so no drawing is done
int d = dash[idx] - phase; if (det == 0) {
int lx = x1 - x0; goTo(x1, y1);
int ly = y1 - y0; return;
}
float dx = x1 - x0;
float dy = y1 - y0;
// Compute segment length in the untransformed // Compute segment length in the untransformed
// coordinate system // coordinate system
// IMPL NOTE - use fixed point
int l; float la = (dy*m00 - dx*m10)/det;
if (symmetric) { float lb = (dy*m01 - dx*m11)/det;
l = (int)((PiscesMath.hypot(lx, ly)*65536L)/ldet); float origLen = (float) Math.hypot(la, lb);
} else{
long la = ((long)ly*m00 - (long)lx*m10)/ldet; if (origLen == 0) {
long lb = ((long)ly*m01 - (long)lx*m11)/ldet; // Let the output LineSink deal with cases where dx, dy are 0.
l = (int)PiscesMath.hypot(la, lb); goTo(x1, y1);
return;
} }
if (l < d) { // The scaling factors needed to get the dx and dy of the
// transformed dash segments.
float cx = dx / origLen;
float cy = dy / origLen;
while (true) {
float leftInThisDashSegment = dash[idx] - phase;
if (origLen < leftInThisDashSegment) {
goTo(x1, y1); goTo(x1, y1);
// Advance phase within current dash segment // Advance phase within current dash segment
phase += l; phase += origLen;
return;
} else if (origLen == leftInThisDashSegment) {
goTo(x1, y1);
phase = 0f;
idx = (idx + 1) % dash.length;
dashOn = !dashOn;
return; return;
} }
long t; float dashx, dashy;
int xsplit, ysplit; float dashdx = dash[idx] * cx;
// // For zero length dashses, SE appears to move 1/8 unit float dashdy = dash[idx] * cy;
// // in device space if (phase == 0) {
// if (d == 0) { dashx = x0 + dashdx;
// double dlx = lx/65536.0; dashy = y0 + dashdy;
// double dly = ly/65536.0; } else {
// len = PiscesMath.hypot(dlx, dly); float p = (leftInThisDashSegment) / dash[idx];
// double dt = 1.0/(8*len); dashx = x0 + p * dashdx;
// double dxsplit = (x0/65536.0) + dt*dlx; dashy = y0 + p * dashdy;
// double dysplit = (y0/65536.0) + dt*dly; }
// xsplit = (int)(dxsplit*65536.0);
// ysplit = (int)(dysplit*65536.0);
// } else {
t = ((long)d << 16)/l;
xsplit = x0 + (int)(t*(x1 - x0) >> 16);
ysplit = y0 + (int)(t*(y1 - y0) >> 16);
// }
goTo(xsplit, ysplit);
goTo(dashx, dashy);
origLen -= (dash[idx] - phase);
// Advance to next dash segment // Advance to next dash segment
idx = (idx + 1) % dash.length; idx = (idx + 1) % dash.length;
dashOn = !dashOn; dashOn = !dashOn;
...@@ -233,6 +199,7 @@ public class Dasher extends LineSink { ...@@ -233,6 +199,7 @@ public class Dasher extends LineSink {
} }
} }
public void close() { public void close() {
lineTo(sx, sy); lineTo(sx, sy);
if (firstDashOn) { if (firstDashOn) {
......
...@@ -39,16 +39,16 @@ package sun.java2d.pisces; ...@@ -39,16 +39,16 @@ package sun.java2d.pisces;
* <code>LineSink</code> interface. * <code>LineSink</code> interface.
* *
*/ */
public abstract class LineSink { public interface LineSink {
/** /**
* Moves the current drawing position to the point <code>(x0, * Moves the current drawing position to the point <code>(x0,
* y0)</code>. * y0)</code>.
* *
* @param x0 the X coordinate in S15.16 format * @param x0 the X coordinate
* @param y0 the Y coordinate in S15.16 format * @param y0 the Y coordinate
*/ */
public abstract void moveTo(int x0, int y0); public void moveTo(float x0, float y0);
/** /**
* Provides a hint that the current segment should be joined to * Provides a hint that the current segment should be joined to
...@@ -65,29 +65,29 @@ public abstract class LineSink { ...@@ -65,29 +65,29 @@ public abstract class LineSink {
* <p> Other <code>LineSink</code> classes should simply pass this * <p> Other <code>LineSink</code> classes should simply pass this
* hint to their output sink as needed. * hint to their output sink as needed.
*/ */
public abstract void lineJoin(); public void lineJoin();
/** /**
* Draws a line from the current drawing position to the point * Draws a line from the current drawing position to the point
* <code>(x1, y1)</code> and sets the current drawing position to * <code>(x1, y1)</code> and sets the current drawing position to
* <code>(x1, y1)</code>. * <code>(x1, y1)</code>.
* *
* @param x1 the X coordinate in S15.16 format * @param x1 the X coordinate
* @param y1 the Y coordinate in S15.16 format * @param y1 the Y coordinate
*/ */
public abstract void lineTo(int x1, int y1); public void lineTo(float x1, float y1);
/** /**
* Closes the current path by drawing a line from the current * Closes the current path by drawing a line from the current
* drawing position to the point specified by the moset recent * drawing position to the point specified by the moset recent
* <code>moveTo</code> command. * <code>moveTo</code> command.
*/ */
public abstract void close(); public void close();
/** /**
* Ends the current path. It may be necessary to end a path in * Ends the current path. It may be necessary to end a path in
* order to allow end caps to be drawn. * order to allow end caps to be drawn.
*/ */
public abstract void end(); public void end();
} }
/*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.java2d.pisces;
public class PiscesMath {
private PiscesMath() {}
private static final int SINTAB_LG_ENTRIES = 10;
private static final int SINTAB_ENTRIES = 1 << SINTAB_LG_ENTRIES;
private static int[] sintab;
public static final int PI = (int)(Math.PI*65536.0);
public static final int TWO_PI = (int)(2.0*Math.PI*65536.0);
public static final int PI_OVER_TWO = (int)((Math.PI/2.0)*65536.0);
public static final int SQRT_TWO = (int)(Math.sqrt(2.0)*65536.0);
static {
sintab = new int[SINTAB_ENTRIES + 1];
for (int i = 0; i < SINTAB_ENTRIES + 1; i++) {
double theta = i*(Math.PI/2.0)/SINTAB_ENTRIES;
sintab[i] = (int)(Math.sin(theta)*65536.0);
}
}
public static int sin(int theta) {
int sign = 1;
if (theta < 0) {
theta = -theta;
sign = -1;
}
// 0 <= theta
while (theta >= TWO_PI) {
theta -= TWO_PI;
}
// 0 <= theta < 2*PI
if (theta >= PI) {
theta = TWO_PI - theta;
sign = -sign;
}
// 0 <= theta < PI
if (theta > PI_OVER_TWO) {
theta = PI - theta;
}
// 0 <= theta <= PI/2
int itheta = (int)((long)theta*SINTAB_ENTRIES/(PI_OVER_TWO));
return sign*sintab[itheta];
}
public static int cos(int theta) {
return sin(PI_OVER_TWO - theta);
}
// public static double sqrt(double x) {
// double dsqrt = Math.sqrt(x);
// int ix = (int)(x*65536.0);
// Int Isqrt = Isqrt(Ix);
// Long Lx = (Long)(X*65536.0);
// Long Lsqrt = Lsqrt(Lx);
// System.Out.Println();
// System.Out.Println("X = " + X);
// System.Out.Println("Dsqrt = " + Dsqrt);
// System.Out.Println("Ix = " + Ix);
// System.Out.Println("Isqrt = " + Isqrt/65536.0);
// System.Out.Println("Lx = " + Lx);
// System.Out.Println("Lsqrt = " + Lsqrt/65536.0);
// Return Dsqrt;
// }
// From Ken Turkowski, _Fixed-Point Square Root_, In Graphics Gems V
public static int isqrt(int x) {
int fracbits = 16;
int root = 0;
int remHi = 0;
int remLo = x;
int count = 15 + fracbits/2;
do {
remHi = (remHi << 2) | (remLo >>> 30); // N.B. - unsigned shift R
remLo <<= 2;
root <<= 1;
int testdiv = (root << 1) + 1;
if (remHi >= testdiv) {
remHi -= testdiv;
root++;
}
} while (count-- != 0);
return root;
}
public static long lsqrt(long x) {
int fracbits = 16;
long root = 0;
long remHi = 0;
long remLo = x;
int count = 31 + fracbits/2;
do {
remHi = (remHi << 2) | (remLo >>> 62); // N.B. - unsigned shift R
remLo <<= 2;
root <<= 1;
long testDiv = (root << 1) + 1;
if (remHi >= testDiv) {
remHi -= testDiv;
root++;
}
} while (count-- != 0);
return root;
}
public static double hypot(double x, double y) {
// new RuntimeException().printStackTrace();
return Math.sqrt(x*x + y*y);
}
public static int hypot(int x, int y) {
return (int)((lsqrt((long)x*x + (long)y*y) + 128) >> 8);
}
public static long hypot(long x, long y) {
return (lsqrt(x*x + y*y) + 128) >> 8;
}
}
...@@ -27,6 +27,7 @@ package sun.java2d.pisces; ...@@ -27,6 +27,7 @@ package sun.java2d.pisces;
import java.awt.Shape; import java.awt.Shape;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.geom.FlatteningPathIterator;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.PathIterator; import java.awt.geom.PathIterator;
...@@ -37,23 +38,9 @@ import sun.java2d.pipe.RenderingEngine; ...@@ -37,23 +38,9 @@ import sun.java2d.pipe.RenderingEngine;
import sun.java2d.pipe.AATileGenerator; import sun.java2d.pipe.AATileGenerator;
public class PiscesRenderingEngine extends RenderingEngine { public class PiscesRenderingEngine extends RenderingEngine {
public static Transform4 IdentT4 = new Transform4();
public static double defaultFlat = 0.1; public static double defaultFlat = 0.1;
static int FloatToS15_16(float flt) { private static enum NormMode {OFF, ON_NO_AA, ON_WITH_AA}
flt = flt * 65536f + 0.5f;
if (flt <= -(65536f * 65536f)) {
return Integer.MIN_VALUE;
} else if (flt >= (65536f * 65536f)) {
return Integer.MAX_VALUE;
} else {
return (int) Math.floor(flt);
}
}
static float S15_16ToFloat(int fix) {
return (fix / 65536f);
}
/** /**
* Create a widened path as specified by the parameters. * Create a widened path as specified by the parameters.
...@@ -85,18 +72,19 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -85,18 +72,19 @@ public class PiscesRenderingEngine extends RenderingEngine {
strokeTo(src, strokeTo(src,
null, null,
width, width,
NormMode.OFF,
caps, caps,
join, join,
miterlimit, miterlimit,
dashes, dashes,
dashphase, dashphase,
new LineSink() { new LineSink() {
public void moveTo(int x0, int y0) { public void moveTo(float x0, float y0) {
p2d.moveTo(S15_16ToFloat(x0), S15_16ToFloat(y0)); p2d.moveTo(x0, y0);
} }
public void lineJoin() {} public void lineJoin() {}
public void lineTo(int x1, int y1) { public void lineTo(float x1, float y1) {
p2d.lineTo(S15_16ToFloat(x1), S15_16ToFloat(y1)); p2d.lineTo(x1, y1);
} }
public void close() { public void close() {
p2d.closePath(); p2d.closePath();
...@@ -142,14 +130,17 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -142,14 +130,17 @@ public class PiscesRenderingEngine extends RenderingEngine {
boolean antialias, boolean antialias,
final PathConsumer2D consumer) final PathConsumer2D consumer)
{ {
strokeTo(src, at, bs, thin, normalize, antialias, NormMode norm = (normalize) ?
((antialias) ? NormMode.ON_WITH_AA : NormMode.ON_NO_AA)
: NormMode.OFF;
strokeTo(src, at, bs, thin, norm, antialias,
new LineSink() { new LineSink() {
public void moveTo(int x0, int y0) { public void moveTo(float x0, float y0) {
consumer.moveTo(S15_16ToFloat(x0), S15_16ToFloat(y0)); consumer.moveTo(x0, y0);
} }
public void lineJoin() {} public void lineJoin() {}
public void lineTo(int x1, int y1) { public void lineTo(float x1, float y1) {
consumer.lineTo(S15_16ToFloat(x1), S15_16ToFloat(y1)); consumer.lineTo(x1, y1);
} }
public void close() { public void close() {
consumer.closePath(); consumer.closePath();
...@@ -164,7 +155,7 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -164,7 +155,7 @@ public class PiscesRenderingEngine extends RenderingEngine {
AffineTransform at, AffineTransform at,
BasicStroke bs, BasicStroke bs,
boolean thin, boolean thin,
boolean normalize, NormMode normalize,
boolean antialias, boolean antialias,
LineSink lsink) LineSink lsink)
{ {
...@@ -181,6 +172,7 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -181,6 +172,7 @@ public class PiscesRenderingEngine extends RenderingEngine {
strokeTo(src, strokeTo(src,
at, at,
lw, lw,
normalize,
bs.getEndCap(), bs.getEndCap(),
bs.getLineJoin(), bs.getLineJoin(),
bs.getMiterLimit(), bs.getMiterLimit(),
...@@ -258,6 +250,7 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -258,6 +250,7 @@ public class PiscesRenderingEngine extends RenderingEngine {
void strokeTo(Shape src, void strokeTo(Shape src,
AffineTransform at, AffineTransform at,
float width, float width,
NormMode normalize,
int caps, int caps,
int join, int join,
float miterlimit, float miterlimit,
...@@ -265,36 +258,139 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -265,36 +258,139 @@ public class PiscesRenderingEngine extends RenderingEngine {
float dashphase, float dashphase,
LineSink lsink) LineSink lsink)
{ {
Transform4 t4; float a00 = 1f, a01 = 0f, a10 = 0f, a11 = 1f;
if (at != null && !at.isIdentity()) {
if (at == null || at.isIdentity()) { a00 = (float)at.getScaleX();
t4 = IdentT4; a01 = (float)at.getShearX();
a10 = (float)at.getShearY();
a11 = (float)at.getScaleY();
}
lsink = new Stroker(lsink, width, caps, join, miterlimit, a00, a01, a10, a11);
if (dashes != null) {
lsink = new Dasher(lsink, dashes, dashphase, a00, a01, a10, a11);
}
PathIterator pi;
if (normalize != NormMode.OFF) {
pi = new FlatteningPathIterator(
new NormalizingPathIterator(src.getPathIterator(at), normalize),
defaultFlat);
} else { } else {
t4 = new Transform4(FloatToS15_16((float) at.getScaleX()), pi = src.getPathIterator(at, defaultFlat);
FloatToS15_16((float) at.getShearX()), }
FloatToS15_16((float) at.getShearY()), pathTo(pi, lsink);
FloatToS15_16((float) at.getScaleY()));
} }
lsink = new Stroker(lsink, private static class NormalizingPathIterator implements PathIterator {
FloatToS15_16(width),
caps, private final PathIterator src;
join,
FloatToS15_16(miterlimit), // the adjustment applied to the current position.
t4); private float curx_adjust, cury_adjust;
if (dashes != null) { // the adjustment applied to the last moveTo position.
int fdashes[] = new int[dashes.length]; private float movx_adjust, movy_adjust;
for (int i = 0; i < dashes.length; i++) {
fdashes[i] = FloatToS15_16(dashes[i]); // constants used in normalization computations
private final float lval, rval;
NormalizingPathIterator(PathIterator src, NormMode mode) {
this.src = src;
switch (mode) {
case ON_NO_AA:
// round to nearest (0.25, 0.25) pixel
lval = rval = 0.25f;
break;
case ON_WITH_AA:
// round to nearest pixel center
lval = 0f;
rval = 0.5f;
break;
case OFF:
throw new InternalError("A NormalizingPathIterator should " +
"not be created if no normalization is being done");
default:
throw new InternalError("Unrecognized normalization mode");
} }
lsink = new Dasher(lsink,
fdashes,
FloatToS15_16(dashphase),
t4);
} }
PathIterator pi = src.getPathIterator(at, defaultFlat); public int currentSegment(float[] coords) {
pathTo(pi, lsink); int type = src.currentSegment(coords);
int lastCoord;
switch(type) {
case PathIterator.SEG_CUBICTO:
lastCoord = 4;
break;
case PathIterator.SEG_QUADTO:
lastCoord = 2;
break;
case PathIterator.SEG_LINETO:
case PathIterator.SEG_MOVETO:
lastCoord = 0;
break;
case PathIterator.SEG_CLOSE:
// we don't want to deal with this case later. We just exit now
curx_adjust = movx_adjust;
cury_adjust = movy_adjust;
return type;
default:
throw new InternalError("Unrecognized curve type");
}
// normalize endpoint
float x_adjust = (float)Math.floor(coords[lastCoord] + lval) + rval -
coords[lastCoord];
float y_adjust = (float)Math.floor(coords[lastCoord+1] + lval) + rval -
coords[lastCoord + 1];
coords[lastCoord ] += x_adjust;
coords[lastCoord + 1] += y_adjust;
// now that the end points are done, normalize the control points
switch(type) {
case PathIterator.SEG_CUBICTO:
coords[0] += curx_adjust;
coords[1] += cury_adjust;
coords[2] += x_adjust;
coords[3] += y_adjust;
break;
case PathIterator.SEG_QUADTO:
coords[0] += (curx_adjust + x_adjust) / 2;
coords[1] += (cury_adjust + y_adjust) / 2;
break;
case PathIterator.SEG_LINETO:
break;
case PathIterator.SEG_MOVETO:
movx_adjust = x_adjust;
movy_adjust = y_adjust;
break;
case PathIterator.SEG_CLOSE:
throw new InternalError("This should be handled earlier.");
}
curx_adjust = x_adjust;
cury_adjust = y_adjust;
return type;
}
public int currentSegment(double[] coords) {
float[] tmp = new float[6];
int type = this.currentSegment(tmp);
for (int i = 0; i < 6; i++) {
coords[i] = (float) tmp[i];
}
return type;
}
public int getWindingRule() {
return src.getWindingRule();
}
public boolean isDone() {
return src.isDone();
}
public void next() {
src.next();
}
} }
void pathTo(PathIterator pi, LineSink lsink) { void pathTo(PathIterator pi, LineSink lsink) {
...@@ -302,13 +398,11 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -302,13 +398,11 @@ public class PiscesRenderingEngine extends RenderingEngine {
while (!pi.isDone()) { while (!pi.isDone()) {
switch (pi.currentSegment(coords)) { switch (pi.currentSegment(coords)) {
case PathIterator.SEG_MOVETO: case PathIterator.SEG_MOVETO:
lsink.moveTo(FloatToS15_16(coords[0]), lsink.moveTo(coords[0], coords[1]);
FloatToS15_16(coords[1]));
break; break;
case PathIterator.SEG_LINETO: case PathIterator.SEG_LINETO:
lsink.lineJoin(); lsink.lineJoin();
lsink.lineTo(FloatToS15_16(coords[0]), lsink.lineTo(coords[0], coords[1]);
FloatToS15_16(coords[1]));
break; break;
case PathIterator.SEG_CLOSE: case PathIterator.SEG_CLOSE:
lsink.lineJoin(); lsink.lineJoin();
...@@ -378,18 +472,28 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -378,18 +472,28 @@ public class PiscesRenderingEngine extends RenderingEngine {
int bbox[]) int bbox[])
{ {
PiscesCache pc = PiscesCache.createInstance(); PiscesCache pc = PiscesCache.createInstance();
Renderer r = new Renderer(); Renderer r;
r.setCache(pc); NormMode norm = (normalize) ? NormMode.ON_WITH_AA : NormMode.OFF;
r.setAntialiasing(3, 3);
r.beginRendering(clip.getLoX(), clip.getLoY(),
clip.getWidth(), clip.getHeight());
if (bs == null) { if (bs == null) {
PathIterator pi = s.getPathIterator(at, defaultFlat); PathIterator pi;
r.setWindingRule(pi.getWindingRule()); if (normalize) {
pi = new FlatteningPathIterator(
new NormalizingPathIterator(s.getPathIterator(at), norm),
defaultFlat);
} else {
pi = s.getPathIterator(at, defaultFlat);
}
r = new Renderer(3, 3,
clip.getLoX(), clip.getLoY(),
clip.getWidth(), clip.getHeight(),
pi.getWindingRule(), pc);
pathTo(pi, r); pathTo(pi, r);
} else { } else {
r.setWindingRule(PathIterator.WIND_NON_ZERO); r = new Renderer(3, 3,
strokeTo(s, at, bs, thin, normalize, true, r); clip.getLoX(), clip.getLoY(),
clip.getWidth(), clip.getHeight(),
PathIterator.WIND_NON_ZERO, pc);
strokeTo(s, at, bs, thin, norm, true, r);
} }
r.endRendering(); r.endRendering();
PiscesTileGenerator ptg = new PiscesTileGenerator(pc, r.MAX_AA_ALPHA); PiscesTileGenerator ptg = new PiscesTileGenerator(pc, r.MAX_AA_ALPHA);
...@@ -420,3 +524,4 @@ public class PiscesRenderingEngine extends RenderingEngine { ...@@ -420,3 +524,4 @@ public class PiscesRenderingEngine extends RenderingEngine {
} }
} }
} }
...@@ -25,629 +25,478 @@ ...@@ -25,629 +25,478 @@
package sun.java2d.pisces; package sun.java2d.pisces;
public class Renderer extends LineSink { import java.util.Arrays;
public static final int WIND_EVEN_ODD = 0;
public static final int WIND_NON_ZERO = 1;
// Initial edge list size
// IMPL_NOTE - restore size after growth
public static final int INITIAL_EDGES = 1000;
// Recommended maximum scratchpad sizes. The arrays will grow
// larger if needed, but when finished() is called they will be released
// if they have grown larger than these sizes.
public static final int DEFAULT_INDICES_SIZE = 8192;
public static final int DEFAULT_CROSSINGS_SIZE = 32*1024;
// Antialiasing
private int SUBPIXEL_LG_POSITIONS_X;
private int SUBPIXEL_LG_POSITIONS_Y;
private int SUBPIXEL_MASK_X;
private int SUBPIXEL_MASK_Y;
private int SUBPIXEL_POSITIONS_X;
private int SUBPIXEL_POSITIONS_Y;
int MAX_AA_ALPHA;
private int MAX_AA_ALPHA_DENOM;
private int HALF_MAX_AA_ALPHA_DENOM;
private int XSHIFT;
private int YSHIFT;
private int YSTEP;
private int HYSTEP;
private int YMASK;
private static final int MIN_QUAD_OPT_WIDTH = 100 << 16;
// Cache to store RLE-encoded coverage mask of the current primitive public class Renderer implements LineSink {
PiscesCache cache;
// Bounds of the drawing region, at S15.16 precsion
private int boundsMinX, boundsMinY, boundsMaxX, boundsMaxY;
// Bounds of the current primitive, at subsample precision
private int rasterMinX, rasterMaxX, rasterMinY, rasterMaxY;
// Pixel bounding box for current primitive ///////////////////////////////////////////////////////////////////////////////
private int bboxX0, bboxY0, bboxX1, bboxY1; // Scan line iterator and edge crossing data.
//////////////////////////////////////////////////////////////////////////////
// Current winding rule
private int windingRule;
// Current drawing position, i.e., final point of last segment private int[] crossings;
private int x0, y0;
// Position of most recent 'moveTo' command
private int sx0, sy0;
// Buffer to be filled with one row's worth of alpha values // This is an array of indices into the edge array. It is initialized to
private byte[] rowAA; // needs to be short if 16x16 subsampling // [i * SIZEOF_STRUCT_EDGE for i in range(0, edgesSize/SIZEOF_STRUCT_EDGE)]
// (where range(i, j) is i,i+1,...,j-1 -- just like in python).
// The reason for keeping this is because we need the edges array sorted
// by y0, but we don't want to move all that data around, so instead we
// sort the indices into the edge array, and use edgeIndices to access
// the edges array. This is meant to simulate a pointer array (hence the name)
private int[] edgePtrs;
// Track the number of vertical extrema of the incoming edge list // crossing bounds. The bounds are not necessarily tight (the scan line
// in order to determine the maximum number of crossings of a // at minY, for example, might have no crossings). The x bounds will
// scanline // be accumulated as crossings are computed.
private int firstOrientation; private int minY, maxY;
private int lastOrientation; private int minX, maxX;
private int flips; private int nextY;
// Parameters for emitRow // indices into the edge pointer list. They indicate the "active" sublist in
private int alphaWidth; // the edge list (the portion of the list that contains all the edges that
// cross the next scan line).
private int lo, hi;
public Renderer() { private static final int INIT_CROSSINGS_SIZE = 50;
private void ScanLineItInitialize() {
crossings = new int[INIT_CROSSINGS_SIZE];
edgePtrs = new int[edgesSize / SIZEOF_STRUCT_EDGE];
for (int i = 0; i < edgePtrs.length; i++) {
edgePtrs[i] = i * SIZEOF_STRUCT_EDGE;
} }
public void setAntialiasing(int subpixelLgPositionsX, qsort(0, edgePtrs.length - 1);
int subpixelLgPositionsY) {
this.SUBPIXEL_LG_POSITIONS_X = subpixelLgPositionsX;
this.SUBPIXEL_LG_POSITIONS_Y = subpixelLgPositionsY;
this.SUBPIXEL_MASK_X = // We don't care if we clip some of the line off with ceil, since
(1 << (SUBPIXEL_LG_POSITIONS_X)) - 1; // no scan line crossings will be eliminated (in fact, the ceil is
this.SUBPIXEL_MASK_Y = // the y of the first scan line crossing).
(1 << (SUBPIXEL_LG_POSITIONS_Y)) - 1; nextY = minY = Math.max(boundsMinY, (int)Math.ceil(edgeMinY));
this.SUBPIXEL_POSITIONS_X = maxY = Math.min(boundsMaxY, (int)Math.ceil(edgeMaxY));
1 << (SUBPIXEL_LG_POSITIONS_X);
this.SUBPIXEL_POSITIONS_Y =
1 << (SUBPIXEL_LG_POSITIONS_Y);
this.MAX_AA_ALPHA =
(SUBPIXEL_POSITIONS_X*SUBPIXEL_POSITIONS_Y);
this.MAX_AA_ALPHA_DENOM = 255*MAX_AA_ALPHA;
this.HALF_MAX_AA_ALPHA_DENOM = MAX_AA_ALPHA_DENOM/2;
this.XSHIFT = 16 - SUBPIXEL_LG_POSITIONS_X;
this.YSHIFT = 16 - SUBPIXEL_LG_POSITIONS_Y;
this.YSTEP = 1 << YSHIFT;
this.HYSTEP = 1 << (YSHIFT - 1);
this.YMASK = ~(YSTEP - 1);
}
public int getSubpixelLgPositionsX() { for (lo = 0; lo < edgePtrs.length && edges[edgePtrs[lo]+Y1] <= nextY; lo++)
return SUBPIXEL_LG_POSITIONS_X; ;
for (hi = lo; hi < edgePtrs.length && edges[edgePtrs[hi]+CURY] <= nextY; hi++)
; // the active list is *edgePtrs[lo] (inclusive) *edgePtrs[hi] (exclusive)
for (int i = lo; i < hi; i++) {
setCurY(edgePtrs[i], nextY);
} }
public int getSubpixelLgPositionsY() { // We accumulate X in the iterator because accumulating it in addEdge
return SUBPIXEL_LG_POSITIONS_Y; // like we do with Y does not do much good: if there's an edge
// (0,0)->(1000,10000), and if y gets clipped to 1000, then the x
// bound should be 100, but the accumulator from addEdge would say 1000,
// so we'd still have to accumulate the X bounds as we add crossings.
minX = boundsMinX;
maxX = boundsMaxX;
} }
public void setWindingRule(int windingRule) { private int ScanLineItCurrentY() {
this.windingRule = windingRule; return nextY - 1;
} }
public int getWindingRule() { private int ScanLineItGoToNextYAndComputeCrossings() {
return windingRule; // we go through the active list and remove the ones that don't cross
// the nextY scanline.
int crossingIdx = 0;
for (int i = lo; i < hi; i++) {
if (edges[edgePtrs[i]+Y1] <= nextY) {
edgePtrs[i] = edgePtrs[lo++];
} }
public void beginRendering(int boundsX, int boundsY,
int boundsWidth, int boundsHeight) {
lastOrientation = 0;
flips = 0;
resetEdges();
this.boundsMinX = boundsX << 16;
this.boundsMinY = boundsY << 16;
this.boundsMaxX = (boundsX + boundsWidth) << 16;
this.boundsMaxY = (boundsY + boundsHeight) << 16;
this.bboxX0 = boundsX;
this.bboxY0 = boundsY;
this.bboxX1 = boundsX + boundsWidth;
this.bboxY1 = boundsY + boundsHeight;
} }
if (hi - lo > crossings.length) {
public void moveTo(int x0, int y0) { int newSize = Math.max(hi - lo, crossings.length * 2);
// System.out.println("Renderer: moveTo " + x0/65536.0 + " " + y0/65536.0); crossings = Arrays.copyOf(crossings, newSize);
close();
this.sx0 = this.x0 = x0;
this.sy0 = this.y0 = y0;
this.lastOrientation = 0;
} }
// Now every edge between lo and hi crosses nextY. Compute it's
public void lineJoin() { // crossing and put it in the crossings array.
// System.out.println("Renderer: lineJoin"); for (int i = lo; i < hi; i++) {
// do nothing addCrossing(nextY, getCurCrossing(edgePtrs[i]), (int)edges[edgePtrs[i]+OR], crossingIdx);
gotoNextY(edgePtrs[i]);
crossingIdx++;
} }
public void lineTo(int x1, int y1) { nextY++;
// System.out.println("Renderer: lineTo " + x1/65536.0 + " " + y1/65536.0); // Expand active list to include new edges.
for (; hi < edgePtrs.length && edges[edgePtrs[hi]+CURY] <= nextY; hi++) {
// Ignore horizontal lines setCurY(edgePtrs[hi], nextY);
// Next line will count flip
if (y0 == y1) {
this.x0 = x1;
return;
} }
int orientation = (y0 < y1) ? 1 : -1; Arrays.sort(crossings, 0, crossingIdx);
if (lastOrientation == 0) { return crossingIdx;
firstOrientation = orientation;
} else if (orientation != lastOrientation) {
++flips;
} }
lastOrientation = orientation;
// Bias Y by 1 ULP so endpoints never lie on a scanline private boolean ScanLineItHasNext() {
addEdge(x0, y0 | 0x1, x1, y1 | 0x1); return nextY < maxY;
this.x0 = x1;
this.y0 = y1;
} }
public void close() { private void addCrossing(int y, int x, int or, int idx) {
// System.out.println("Renderer: close"); if (x < minX) {
minX = x;
int orientation = lastOrientation;
if (y0 != sy0) {
orientation = (y0 < sy0) ? 1 : -1;
}
if (orientation != firstOrientation) {
++flips;
} }
lineTo(sx0, sy0); if (x > maxX) {
maxX = x;
} }
x <<= 1;
public void end() { crossings[idx] = ((or == 1) ? (x | 0x1) : x);
close();
// System.out.println("Renderer: end");
// do nothing
}
// Scan convert a single edge
private void computeCrossingsForEdge(int index,
int boundsMinY, int boundsMaxY) {
int iy0 = edges[index + 1];
int iy1 = edges[index + 3];
// Clip to valid Y range
int clipy0 = (iy0 > boundsMinY) ? iy0 : boundsMinY;
int clipy1 = (iy1 < boundsMaxY) ? iy1 : boundsMaxY;
int minY = ((clipy0 + HYSTEP) & YMASK) + HYSTEP;
int maxY = ((clipy1 - HYSTEP) & YMASK) + HYSTEP;
// IMPL_NOTE - If line falls outside the valid X range, could
// draw a vertical line instead
// Exit if no scanlines are crossed
if (minY > maxY) {
return;
} }
// Scan convert line using a DDA approach
int ix0 = edges[index]; // quicksort implementation for sorting the edge indices ("pointers")
int ix1 = edges[index + 2]; // by increasing y0. first, last are indices into the "pointer" array
long dx = ((long) ix1) - ix0; // It sorts the pointer array from first (inclusive) to last (inclusive)
long dy = ((long) iy1) - iy0; private void qsort(int first, int last) {
if (last > first) {
// Compute first crossing point at y = minY int p = partition(first, last);
int orientation = edges[index + 4]; if (first < p - 1) {
int y = minY; qsort(first, p - 1);
long lx = (((long) y) - iy0)*dx/dy + ix0;
addCrossing(y >> YSHIFT, (int)(lx >> XSHIFT), orientation);
// Advance y to next scanline, exit if past endpoint
y += YSTEP;
if (y > maxY) {
return;
} }
if (p < last) {
// Compute xstep only if additional scanlines are crossed qsort(p, last);
// For each scanline, add xstep to lx and YSTEP to y and
// emit the new crossing
long xstep = ((long)YSTEP*dx)/dy;
for (; y <= maxY; y += YSTEP) {
lx += xstep;
addCrossing(y >> YSHIFT, (int)(lx >> XSHIFT), orientation);
} }
} }
private void computeBounds() {
rasterMinX = crossingMinX & ~SUBPIXEL_MASK_X;
rasterMaxX = crossingMaxX | SUBPIXEL_MASK_X;
rasterMinY = crossingMinY & ~SUBPIXEL_MASK_Y;
rasterMaxY = crossingMaxY | SUBPIXEL_MASK_Y;
// If nothing was drawn, we have:
// minX = Integer.MAX_VALUE and maxX = Integer.MIN_VALUE
// so nothing to render
if (rasterMinX > rasterMaxX || rasterMinY > rasterMaxY) {
rasterMinX = 0;
rasterMaxX = -1;
rasterMinY = 0;
rasterMaxY = -1;
return;
} }
if (rasterMinX < boundsMinX >> XSHIFT) { // i, j are indices into edgePtrs.
rasterMinX = boundsMinX >> XSHIFT; private int partition(int i, int j) {
} int pivotVal = edgePtrs[i];
if (rasterMinY < boundsMinY >> YSHIFT) { while (i <= j) {
rasterMinY = boundsMinY >> YSHIFT; // edges[edgePtrs[i]+1] is equivalent to (*(edgePtrs[i])).y0 in C
while (edges[edgePtrs[i]+CURY] < edges[pivotVal+CURY]) { i++; }
while (edges[edgePtrs[j]+CURY] > edges[pivotVal+CURY]) { j--; }
if (i <= j) {
int tmp = edgePtrs[i];
edgePtrs[i] = edgePtrs[j];
edgePtrs[j] = tmp;
i++;
j--;
} }
if (rasterMaxX > boundsMaxX >> XSHIFT) {
rasterMaxX = boundsMaxX >> XSHIFT;
} }
if (rasterMaxY > boundsMaxY >> YSHIFT) { return i;
rasterMaxY = boundsMaxY >> YSHIFT; }
//============================================================================
//////////////////////////////////////////////////////////////////////////////
// EDGE LIST
//////////////////////////////////////////////////////////////////////////////
private static final int INIT_NUM_EDGES = 1000;
private static final int SIZEOF_STRUCT_EDGE = 5;
// The following array is a poor man's struct array:
// it simulates a struct array by having
// edges[SIZEOF_STRUCT_EDGE * i + j] be the jth field in the ith element
// of an array of edge structs.
private float[] edges;
private int edgesSize; // size of the edge list.
private static final int Y1 = 0;
private static final int SLOPE = 1;
private static final int OR = 2; // the orientation. This can be -1 or 1.
// -1 means up, 1 means down.
private static final int CURY = 3; // j = 5 corresponds to the "current Y".
// Each edge keeps track of the last scanline
// crossing it computed, and this is the y coord of
// that scanline.
private static final int CURX = 4; //the x coord of the current crossing.
// Note that while the array is declared as a float[] not all of it's
// elements should be floats. currentY and Orientation should be ints (or int and
// byte respectively), but they all need to be the same type. This isn't
// really a problem because floats can represent exactly all 23 bit integers,
// which should be more than enough.
// Note, also, that we only need x1 for slope computation, so we don't need
// to store it. x0, y0 don't need to be stored either. They can be put into
// curx, cury, and it's ok if they're lost when curx and cury are changed.
// We take this undeniably ugly and error prone approach (instead of simply
// making an Edge class) for performance reasons. Also, it would probably be nicer
// to have one array for each field, but that would defeat the purpose because
// it would make poor use of the processor cache, since we tend to access
// all the fields for one edge at a time.
private float edgeMinY;
private float edgeMaxY;
private void addEdge(float x0, float y0, float x1, float y1) {
float or = (y0 < y1) ? 1f : -1f; // orientation: 1 = UP; -1 = DOWN
if (or == -1) {
float tmp = y0;
y0 = y1;
y1 = tmp;
tmp = x0;
x0 = x1;
x1 = tmp;
} }
// skip edges that don't cross a scanline
if (Math.ceil(y0) >= Math.ceil(y1)) {
return;
} }
private int clamp(int x, int min, int max) { int newSize = edgesSize + SIZEOF_STRUCT_EDGE;
if (x < min) { if (edges.length < newSize) {
return min; edges = Arrays.copyOf(edges, newSize * 2);
} else if (x > max) {
return max;
}
return x;
} }
edges[edgesSize+CURX] = x0;
edges[edgesSize+CURY] = y0;
edges[edgesSize+Y1] = y1;
edges[edgesSize+SLOPE] = (x1 - x0) / (y1 - y0);
edges[edgesSize+OR] = or;
// the crossing values can't be initialized meaningfully yet. This
// will have to wait until setCurY is called
edgesSize += SIZEOF_STRUCT_EDGE;
private void _endRendering() { // Accumulate edgeMinY and edgeMaxY
if (flips == 0) { if (y0 < edgeMinY) { edgeMinY = y0; }
bboxX0 = bboxY0 = 0; if (y1 > edgeMaxY) { edgeMaxY = y1; }
bboxX1 = bboxY1 = -1;
return;
} }
// Special case for filling a single rect with a flat, opaque color // As far as the following methods care, this edges extends to infinity.
// REMIND: This special case was not originally written to fill a // They can compute the x intersect of any horizontal line.
// cache object and called directly to a Blit - it needs some code // precondition: idx is the index to the start of the desired edge.
// to fill the cache instead to be useful for this usage... // So, if the ith edge is wanted, idx should be SIZEOF_STRUCT_EDGE * i
if (false /* Does not work with cache (yet?) */ && private void setCurY(int idx, int y) {
edgeIdx == 10 && // compute the x crossing of edge at idx and horizontal line y
edges[0] == edges[2] && // currentXCrossing = (y - y0)*slope + x0
edges[1] == edges[6] && edges[idx + CURX] = (y - edges[idx + CURY]) * edges[idx + SLOPE] + edges[idx+CURX];
edges[3] == edges[8] && edges[idx + CURY] = (float)y;
edges[5] == edges[7] &&
Math.abs(edges[0] - edges[5]) > MIN_QUAD_OPT_WIDTH)
{
int x0 = edges[0] >> XSHIFT;
int y0 = edges[1] >> YSHIFT;
int x1 = edges[5] >> XSHIFT;
int y1 = edges[3] >> YSHIFT;
if (x0 > x1) {
int tmp = x0;
x0 = x1;
x1 = tmp;
} }
if (y0 > y1) {
int tmp = y0; private void gotoNextY(int idx) {
y0 = y1; edges[idx + CURY] += 1f; // i.e. curY += 1
y1 = tmp; edges[idx + CURX] += edges[idx + SLOPE]; // i.e. curXCrossing += slope
} }
int bMinX = this.boundsMinX >> XSHIFT; private int getCurCrossing(int idx) {
int bMinY = this.boundsMinY >> YSHIFT; return (int)edges[idx + CURX];
int bMaxX = this.boundsMaxX >> XSHIFT; }
int bMaxY = this.boundsMaxY >> YSHIFT; //====================================================================================
// Clip to image bounds in supersampled coordinates
x0 = clamp(x0, bMinX, bMaxX);
x1 = clamp(x1, bMinX, bMaxX);
y0 = clamp(y0, bMinY, bMaxY);
y1 = clamp(y1, bMinY, bMaxY);
/*
* REMIND: Need to fill the cache here instead...
Blit.fillRectSrcOver(this,
imageData, imageType,
imageOffset,
imageScanlineStride, imagePixelStride,
width, height,
x0, y0, x1, y1,
cred, cgreen, cblue);
*/
bboxX0 = x0 >> SUBPIXEL_LG_POSITIONS_X; public static final int WIND_EVEN_ODD = 0;
bboxY0 = y0 >> SUBPIXEL_LG_POSITIONS_Y; public static final int WIND_NON_ZERO = 1;
bboxX1 = (x1 + SUBPIXEL_POSITIONS_X - 1)
>> SUBPIXEL_LG_POSITIONS_X;
bboxY1 = (y1 + SUBPIXEL_POSITIONS_Y - 1)
>> SUBPIXEL_LG_POSITIONS_Y;
return; // Antialiasing
} final private int SUBPIXEL_LG_POSITIONS_X;
final private int SUBPIXEL_LG_POSITIONS_Y;
final private int SUBPIXEL_POSITIONS_X;
final private int SUBPIXEL_POSITIONS_Y;
final private int SUBPIXEL_MASK_X;
final private int SUBPIXEL_MASK_Y;
final int MAX_AA_ALPHA;
int minY = (edgeMinY > boundsMinY) ? edgeMinY : boundsMinY; // Cache to store RLE-encoded coverage mask of the current primitive
int maxY = (edgeMaxY < boundsMaxY) ? edgeMaxY : boundsMaxY; final PiscesCache cache;
// Check for empty intersection of primitive with the drawing area // Bounds of the drawing region, at subpixel precision.
if (minY > maxY) { final private int boundsMinX, boundsMinY, boundsMaxX, boundsMaxY;
bboxX0 = bboxY0 = 0;
bboxX1 = bboxY1 = -1;
return;
}
// Compute Y extent in subpixel coordinates // Pixel bounding box for current primitive
int iminY = (minY >> YSHIFT) & ~SUBPIXEL_MASK_Y; private int pix_bboxX0, pix_bboxY0, pix_bboxX1, pix_bboxY1;
int imaxY = (maxY >> YSHIFT) | SUBPIXEL_MASK_Y;
int yextent = (imaxY - iminY) + 1;
// Maximum number of crossings // Current winding rule
int size = flips*yextent; final private int windingRule;
int bmax = (boundsMaxY >> YSHIFT) - 1; // Current drawing position, i.e., final point of last segment
if (imaxY > bmax) { private float x0, y0;
imaxY = bmax;
}
// Initialize X bounds, will be refined for each strip // Position of most recent 'moveTo' command
bboxX0 = Integer.MAX_VALUE; private float pix_sx0, pix_sy0;
bboxX1 = Integer.MIN_VALUE;
// Set Y bounds public Renderer(int subpixelLgPositionsX, int subpixelLgPositionsY,
bboxY0 = iminY >> SUBPIXEL_LG_POSITIONS_Y; int pix_boundsX, int pix_boundsY,
bboxY1 = (imaxY + SUBPIXEL_POSITIONS_Y - 1) >> SUBPIXEL_LG_POSITIONS_Y; int pix_boundsWidth, int pix_boundsHeight,
int windingRule,
PiscesCache cache) {
this.SUBPIXEL_LG_POSITIONS_X = subpixelLgPositionsX;
this.SUBPIXEL_LG_POSITIONS_Y = subpixelLgPositionsY;
this.SUBPIXEL_MASK_X = (1 << (SUBPIXEL_LG_POSITIONS_X)) - 1;
this.SUBPIXEL_MASK_Y = (1 << (SUBPIXEL_LG_POSITIONS_Y)) - 1;
this.SUBPIXEL_POSITIONS_X = 1 << (SUBPIXEL_LG_POSITIONS_X);
this.SUBPIXEL_POSITIONS_Y = 1 << (SUBPIXEL_LG_POSITIONS_Y);
this.MAX_AA_ALPHA = (SUBPIXEL_POSITIONS_X * SUBPIXEL_POSITIONS_Y);
// Compute number of rows that can be processing using this.edges = new float[SIZEOF_STRUCT_EDGE * INIT_NUM_EDGES];
// a crossings table no larger than DEFAULT_CROSSINGS_SIZE. edgeMinY = Float.POSITIVE_INFINITY;
// However, we must process at least one row, so we grow the table edgeMaxY = Float.NEGATIVE_INFINITY;
// temporarily if needed. This would require an object with a edgesSize = 0;
// huge number of flips.
int rows = DEFAULT_CROSSINGS_SIZE/(flips*SUBPIXEL_POSITIONS_Y);
rows = Math.min(rows, yextent);
rows = Math.max(rows, 1);
for (int i = iminY; i <= imaxY; i += rows*SUBPIXEL_POSITIONS_Y) {
// Compute index of last scanline to be processed in this pass
int last = Math.min(i + rows*SUBPIXEL_POSITIONS_Y - 1, imaxY);
setCrossingsExtents(i, last, flips);
int bminY = i << YSHIFT; this.windingRule = windingRule;
int bmaxY = (last << YSHIFT) | ~YMASK; this.cache = cache;
// Process edges from the edge list this.boundsMinX = pix_boundsX * SUBPIXEL_POSITIONS_X;
int maxIdx = edgeIdx; this.boundsMinY = pix_boundsY * SUBPIXEL_POSITIONS_Y;
for (int index = 0; index < maxIdx; index += 5) { this.boundsMaxX = (pix_boundsX + pix_boundsWidth) * SUBPIXEL_POSITIONS_X;
// Test y1 < min: this.boundsMaxY = (pix_boundsY + pix_boundsHeight) * SUBPIXEL_POSITIONS_Y;
//
// If edge lies entirely above current strip,
// discard it
if (edges[index + 3] < bminY) {
// Overwrite the edge with the last edge
edgeIdx -= 5;
int fidx = edgeIdx;
int tidx = index;
edges[tidx++] = edges[fidx++];
edges[tidx++] = edges[fidx++];
edges[tidx++] = edges[fidx++];
edges[tidx++] = edges[fidx++];
edges[tidx ] = edges[fidx ];
maxIdx -= 5; this.pix_bboxX0 = pix_boundsX;
index -= 5; this.pix_bboxY0 = pix_boundsY;
continue; this.pix_bboxX1 = pix_boundsX + pix_boundsWidth;
this.pix_bboxY1 = pix_boundsY + pix_boundsHeight;
} }
// Test y0 > max: private float tosubpixx(float pix_x) {
// return pix_x * SUBPIXEL_POSITIONS_X;
// If edge lies entirely below current strip,
// skip it for now
if (edges[index + 1] > bmaxY) {
continue;
} }
private float tosubpixy(float pix_y) {
computeCrossingsForEdge(index, bminY, bmaxY); return pix_y * SUBPIXEL_POSITIONS_Y;
} }
computeBounds(); public void moveTo(float pix_x0, float pix_y0) {
if (rasterMaxX < rasterMinX) { close();
continue; this.pix_sx0 = pix_x0;
this.pix_sy0 = pix_y0;
this.y0 = tosubpixy(pix_y0);
this.x0 = tosubpixx(pix_x0);
} }
bboxX0 = Math.min(bboxX0, public void lineJoin() { /* do nothing */ }
rasterMinX >> SUBPIXEL_LG_POSITIONS_X);
bboxX1 = Math.max(bboxX1,
(rasterMaxX + SUBPIXEL_POSITIONS_X - 1)
>> SUBPIXEL_LG_POSITIONS_X);
renderStrip();
}
// Free up any unusually large scratchpad memory used by the public void lineTo(float pix_x1, float pix_y1) {
// preceding primitive float x1 = tosubpixx(pix_x1);
crossingListFinished(); float y1 = tosubpixy(pix_y1);
}
public void endRendering() { // Ignore horizontal lines
// Set up the cache to accumulate the bounding box if (y0 == y1) {
if (cache != null) { this.x0 = x1;
cache.bboxX0 = Integer.MAX_VALUE; return;
cache.bboxY0 = Integer.MAX_VALUE;
cache.bboxX1 = Integer.MIN_VALUE;
cache.bboxY1 = Integer.MIN_VALUE;
} }
_endRendering(); addEdge(x0, y0, x1, y1);
}
public void getBoundingBox(int[] bbox) { this.x0 = x1;
bbox[0] = bboxX0; this.y0 = y1;
bbox[1] = bboxY0;
bbox[2] = bboxX1 - bboxX0;
bbox[3] = bboxY1 - bboxY0;
} }
private void renderStrip() { public void close() {
// Grow rowAA according to the raster width // lineTo expects its input in pixel coordinates.
int width = (rasterMaxX - rasterMinX + 1) >> SUBPIXEL_LG_POSITIONS_X; lineTo(pix_sx0, pix_sy0);
alphaWidth = width; }
// Allocate one extra entry in rowAA to avoid a conditional in public void end() {
// the rendering loop close();
int bufLen = width + 1;
if (this.rowAA == null || this.rowAA.length < bufLen) {
this.rowAA = new byte[bufLen];
} }
private void _endRendering() {
// Mask to determine the relevant bit of the crossing sum // Mask to determine the relevant bit of the crossing sum
// 0x1 if EVEN_ODD, all bits if NON_ZERO // 0x1 if EVEN_ODD, all bits if NON_ZERO
int mask = (windingRule == WIND_EVEN_ODD) ? 0x1 : ~0x0; int mask = (windingRule == WIND_EVEN_ODD) ? 0x1 : ~0x0;
int y = 0; // add 1 to better deal with the last pixel in a pixel row.
int prevY = rasterMinY - 1; int width = ((boundsMaxX - boundsMinX) >> SUBPIXEL_LG_POSITIONS_X) + 1;
byte[] alpha = new byte[width+1];
int minX = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
iterateCrossings(); // Now we iterate through the scanlines. We must tell emitRow the coord
while (hasMoreCrossingRows()) { // of the first non-transparent pixel, so we must keep accumulators for
y = crossingY; // the first and last pixels of the section of the current pixel row
// that we will emit.
// We also need to accumulate pix_bbox*, but the iterator does it
// for us. We will just get the values from it once this loop is done
int pix_maxX = Integer.MIN_VALUE;
int pix_minX = Integer.MAX_VALUE;
// Emit any skipped rows int y = boundsMinY; // needs to be declared here so we emit the last row properly.
for (int j = prevY + 1; j < y; j++) { ScanLineItInitialize();
if (((j & SUBPIXEL_MASK_Y) == SUBPIXEL_MASK_Y) || for ( ; ScanLineItHasNext(); ) {
(j == rasterMaxY)) { int numCrossings = ScanLineItGoToNextYAndComputeCrossings();
emitRow(j >> SUBPIXEL_LG_POSITIONS_Y, 0, -1); y = ScanLineItCurrentY();
}
}
prevY = y;
if (crossingRowIndex < crossingRowCount) { if (numCrossings > 0) {
int lx = crossings[crossingRowOffset + crossingRowIndex]; int lowx = crossings[0] >> 1;
lx >>= 1; int highx = crossings[numCrossings - 1] >> 1;
int hx = crossings[crossingRowOffset + crossingRowCount - 1]; int x0 = Math.max(lowx, boundsMinX);
hx >>= 1; int x1 = Math.min(highx, boundsMaxX);
int x0 = lx > rasterMinX ? lx : rasterMinX;
int x1 = hx < rasterMaxX ? hx : rasterMaxX;
x0 -= rasterMinX;
x1 -= rasterMinX;
minX = Math.min(minX, x0 >> SUBPIXEL_LG_POSITIONS_X); pix_minX = Math.min(pix_minX, x0 >> SUBPIXEL_LG_POSITIONS_X);
maxX = Math.max(maxX, x1 >> SUBPIXEL_LG_POSITIONS_X); pix_maxX = Math.max(pix_maxX, x1 >> SUBPIXEL_LG_POSITIONS_X);
} }
int sum = 0; int sum = 0;
int prev = rasterMinX; int prev = boundsMinX;
while (crossingRowIndex < crossingRowCount) { for (int i = 0; i < numCrossings; i++) {
int crxo = crossings[crossingRowOffset + crossingRowIndex]; int curxo = crossings[i];
crossingRowIndex++; int curx = curxo >> 1;
int crorientation = ((curxo & 0x1) == 0x1) ? 1 : -1;
if ((sum & mask) != 0) {
int x0 = Math.max(prev, boundsMinX);
int x1 = Math.min(curx, boundsMaxX);
if (x0 < x1) {
x0 -= boundsMinX; // turn x0, x1 from coords to indeces
x1 -= boundsMinX; // in the alpha array.
int crx = crxo >> 1; int pix_x = x0 >> SUBPIXEL_LG_POSITIONS_X;
int crorientation = ((crxo & 0x1) == 0x1) ? 1 : -1; int pix_xmaxm1 = (x1 - 1) >> SUBPIXEL_LG_POSITIONS_X;
if ((sum & mask) != 0) { if (pix_x == pix_xmaxm1) {
// Clip to active X range, if x1 < x0 loop will
// have no effect
int x0 = prev > rasterMinX ? prev : rasterMinX;
int x1 = crx < rasterMaxX ? crx : rasterMaxX;
// Empty spans
if (x1 > x0) {
x0 -= rasterMinX;
x1 -= rasterMinX;
// Accumulate alpha, equivalent to:
// for (int x = x0; x < x1; x++) {
// ++rowAA[x >> SUBPIXEL_LG_POSITIONS_X];
// }
//
// In the middle of the span, we can update a full
// pixel at a time (i.e., SUBPIXEL_POSITIONS_X
// subpixels)
int x = x0 >> SUBPIXEL_LG_POSITIONS_X;
int xmaxm1 = (x1 - 1) >> SUBPIXEL_LG_POSITIONS_X;
if (x == xmaxm1) {
// Start and end in same pixel // Start and end in same pixel
rowAA[x] += x1 - x0; alpha[pix_x] += (x1 - x0);
alpha[pix_x+1] -= (x1 - x0);
} else { } else {
// Start and end in different pixels int pix_xmax = x1 >> SUBPIXEL_LG_POSITIONS_X;
rowAA[x++] += SUBPIXEL_POSITIONS_X - alpha[pix_x] += SUBPIXEL_POSITIONS_X - (x0 & SUBPIXEL_MASK_X);
(x0 & SUBPIXEL_MASK_X); alpha[pix_x+1] += (x0 & SUBPIXEL_MASK_X);
int xmax = x1 >> SUBPIXEL_LG_POSITIONS_X; alpha[pix_xmax] -= SUBPIXEL_POSITIONS_X - (x1 & SUBPIXEL_MASK_X);
while (x < xmax) { alpha[pix_xmax+1] -= (x1 & SUBPIXEL_MASK_X);
rowAA[x++] += SUBPIXEL_POSITIONS_X;
}
// Note - at this point it is possible that
// x == width, which implies that
// x1 & SUBPIXEL_MASK_X == 0. We allocate
// one extra entry in rowAA so this
// assignment will be harmless. The alternative
// is an extra conditional here, or some other
// scheme to deal with the last pixel better.
rowAA[x] += x1 & SUBPIXEL_MASK_X;
} }
} }
} }
sum += crorientation; sum += crorientation;
prev = crx; prev = curx;
} }
// Every SUBPIXEL_POSITIONS rows, output an antialiased row if ((y & SUBPIXEL_MASK_Y) == SUBPIXEL_MASK_Y) {
if (((y & SUBPIXEL_MASK_Y) == SUBPIXEL_MASK_Y) || emitRow(alpha, y >> SUBPIXEL_LG_POSITIONS_Y, pix_minX, pix_maxX);
(y == rasterMaxY)) { pix_minX = Integer.MAX_VALUE;
emitRow(y >> SUBPIXEL_LG_POSITIONS_Y, minX, maxX); pix_maxX = Integer.MIN_VALUE;
minX = Integer.MAX_VALUE;
maxX = Integer.MIN_VALUE;
} }
} }
// Emit final row // Emit final row
for (int j = prevY + 1; j <= rasterMaxY; j++) { if (pix_maxX >= pix_minX) {
if (((j & SUBPIXEL_MASK_Y) == SUBPIXEL_MASK_Y) || emitRow(alpha, y >> SUBPIXEL_LG_POSITIONS_Y, pix_minX, pix_maxX);
(j == rasterMaxY)) {
emitRow(j >> SUBPIXEL_LG_POSITIONS_Y, minX, maxX);
minX = Integer.MAX_VALUE;
maxX = Integer.MIN_VALUE;
}
} }
pix_bboxX0 = minX >> SUBPIXEL_LG_POSITIONS_X;
pix_bboxX1 = maxX >> SUBPIXEL_LG_POSITIONS_X;
pix_bboxY0 = minY >> SUBPIXEL_LG_POSITIONS_Y;
pix_bboxY1 = maxY >> SUBPIXEL_LG_POSITIONS_Y;
} }
private void clearAlpha(byte[] alpha,
int width,
int minX, int maxX) {
if (maxX >= minX) {
int w = maxX - minX + 1;
if (w + minX > width) {
w = width - minX;
}
int aidx = minX; public void endRendering() {
for (int i = 0; i < w; i++, aidx++) { // Set up the cache to accumulate the bounding box
alpha[aidx] = (byte)0; if (cache != null) {
cache.bboxX0 = Integer.MAX_VALUE;
cache.bboxY0 = Integer.MAX_VALUE;
cache.bboxX1 = Integer.MIN_VALUE;
cache.bboxY1 = Integer.MIN_VALUE;
} }
_endRendering();
} }
public void getBoundingBox(int[] pix_bbox) {
pix_bbox[0] = pix_bboxX0;
pix_bbox[1] = pix_bboxY0;
pix_bbox[2] = pix_bboxX1 - pix_bboxX0;
pix_bbox[3] = pix_bboxY1 - pix_bboxY0;
} }
private void emitRow(int y, int minX, int maxX) { private void emitRow(byte[] alphaRow, int pix_y, int pix_from, int pix_to) {
// Copy rowAA data into the cache if one is present // Copy rowAA data into the cache if one is present
if (cache != null) { if (cache != null) {
if (maxX >= minX) { if (pix_to >= pix_from) {
int x0 = minX + (rasterMinX >> SUBPIXEL_LG_POSITIONS_X); cache.startRow(pix_y, pix_from, pix_to);
int x1 = maxX + (rasterMinX >> SUBPIXEL_LG_POSITIONS_X);
cache.startRow(y, x0, x1); // Perform run-length encoding and store results in the cache
int srcIdx = minX; int from = pix_from - (boundsMinX >> SUBPIXEL_LG_POSITIONS_X);
int to = pix_to - (boundsMinX >> SUBPIXEL_LG_POSITIONS_X);
// Perform run-length encoding
// and store results in the cache
byte startVal = rowAA[srcIdx++];
int runLen = 1; int runLen = 1;
while (srcIdx <= maxX) { byte startVal = alphaRow[from];
byte nextVal = rowAA[srcIdx++]; for (int i = from + 1; i <= to; i++) {
byte nextVal = (byte)(startVal + alphaRow[i]);
if (nextVal == startVal && runLen < 255) { if (nextVal == startVal && runLen < 255) {
++runLen; runLen++;
} else { } else {
cache.addRLERun(startVal, runLen); cache.addRLERun(startVal, runLen);
runLen = 1; runLen = 1;
startVal = nextVal; startVal = nextVal;
} }
...@@ -656,190 +505,6 @@ public class Renderer extends LineSink { ...@@ -656,190 +505,6 @@ public class Renderer extends LineSink {
cache.addRLERun((byte)0, 0); cache.addRLERun((byte)0, 0);
} }
} }
java.util.Arrays.fill(alphaRow, (byte)0);
clearAlpha(rowAA,
alphaWidth,
minX, maxX);
}
public void setCache(PiscesCache cache) {
this.cache = cache;
}
// Edge list data
private int[] edges = new int[5*INITIAL_EDGES];
private int edgeIdx = 0;
private int edgeMinY = Integer.MAX_VALUE;
private int edgeMaxY = Integer.MIN_VALUE;
private void addEdge(int x0, int y0, int x1, int y1) {
int newLen = edgeIdx + 5;
if (edges.length < newLen) {
int[] tmp = new int[Math.max(11*edges.length/10, newLen)];
System.arraycopy(edges, 0, tmp, 0, edgeIdx);
this.edges = tmp;
}
int orientation = 1;
if (y0 > y1) {
int tmp = y0;
y0 = y1;
y1 = tmp;
orientation = -1;
}
// Skip edges that don't cross a subsampled scanline
int eminY = ((y0 + HYSTEP) & YMASK);
int emaxY = ((y1 - HYSTEP) & YMASK);
if (eminY > emaxY) {
return;
}
if (orientation == -1) {
int tmp = x0;
x0 = x1;
x1 = tmp;
}
edges[edgeIdx++] = x0;
edges[edgeIdx++] = y0;
edges[edgeIdx++] = x1;
edges[edgeIdx++] = y1;
edges[edgeIdx++] = orientation;
// Update Y bounds of primitive
if (y0 < edgeMinY) {
edgeMinY = y0;
}
if (y1 > edgeMaxY) {
edgeMaxY = y1;
}
}
private void resetEdges() {
this.edgeIdx = 0;
this.edgeMinY = Integer.MAX_VALUE;
this.edgeMaxY = Integer.MIN_VALUE;
}
// Crossing list data
private int[] crossingIndices;
private int[] crossings;
private int crossingMinY;
private int crossingMaxY;
private int crossingMinX = Integer.MAX_VALUE;
private int crossingMaxX = Integer.MIN_VALUE;
private int crossingMaxXEntries;
private int numCrossings = 0;
private boolean crossingsSorted = false;
private int crossingY;
private int crossingRowCount;
private int crossingRowOffset;
private int crossingRowIndex;
private void setCrossingsExtents(int minY, int maxY, int maxXEntries) {
int yextent = maxY - minY + 1;
// Grow indices array as needed
if (crossingIndices == null || crossingIndices.length < yextent) {
this.crossingIndices =
new int[Math.max(yextent, DEFAULT_INDICES_SIZE)];
}
// Grow crossings array as needed
if (crossings == null || crossings.length < yextent*maxXEntries) {
this.crossings = new int[Math.max(yextent*maxXEntries,
DEFAULT_CROSSINGS_SIZE)];
}
this.crossingMinY = minY;
this.crossingMaxY = maxY;
this.crossingMaxXEntries = maxXEntries;
resetCrossings();
}
private void resetCrossings() {
int yextent = crossingMaxY - crossingMinY + 1;
int start = 0;
for (int i = 0; i < yextent; i++) {
crossingIndices[i] = start;
start += crossingMaxXEntries;
}
crossingMinX = Integer.MAX_VALUE;
crossingMaxX = Integer.MIN_VALUE;
numCrossings = 0;
crossingsSorted = false;
}
// Free sorting arrays if larger than maximum size
private void crossingListFinished() {
if (crossings != null && crossings.length > DEFAULT_CROSSINGS_SIZE) {
crossings = new int[DEFAULT_CROSSINGS_SIZE];
}
if (crossingIndices != null &&
crossingIndices.length > DEFAULT_INDICES_SIZE)
{
crossingIndices = new int[DEFAULT_INDICES_SIZE];
}
}
private void sortCrossings(int[] x, int off, int len) {
for (int i = off + 1; i < off + len; i++) {
int j = i;
int xj = x[j];
int xjm1;
while (j > off && (xjm1 = x[j - 1]) > xj) {
x[j] = xjm1;
x[j - 1] = xj;
j--;
}
}
}
private void sortCrossings() {
int start = 0;
for (int i = 0; i <= crossingMaxY - crossingMinY; i++) {
sortCrossings(crossings, start, crossingIndices[i] - start);
start += crossingMaxXEntries;
}
}
private void addCrossing(int y, int x, int orientation) {
if (x < crossingMinX) {
crossingMinX = x;
}
if (x > crossingMaxX) {
crossingMaxX = x;
}
int index = crossingIndices[y - crossingMinY]++;
x <<= 1;
crossings[index] = (orientation == 1) ? (x | 0x1) : x;
++numCrossings;
}
private void iterateCrossings() {
if (!crossingsSorted) {
sortCrossings();
crossingsSorted = true;
}
crossingY = crossingMinY - 1;
crossingRowOffset = -crossingMaxXEntries;
}
private boolean hasMoreCrossingRows() {
if (++crossingY <= crossingMaxY) {
crossingRowOffset += crossingMaxXEntries;
int y = crossingY - crossingMinY;
crossingRowCount = crossingIndices[y] - y*crossingMaxXEntries;
crossingRowIndex = 0;
return true;
} else {
return false;
}
} }
} }
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
package sun.java2d.pisces; package sun.java2d.pisces;
public class Stroker extends LineSink { public class Stroker implements LineSink {
private static final int MOVE_TO = 0; private static final int MOVE_TO = 0;
private static final int LINE_TO = 1; private static final int LINE_TO = 1;
...@@ -61,19 +61,15 @@ public class Stroker extends LineSink { ...@@ -61,19 +61,15 @@ public class Stroker extends LineSink {
*/ */
public static final int CAP_SQUARE = 2; public static final int CAP_SQUARE = 2;
LineSink output; private final LineSink output;
int lineWidth; private final int capStyle;
int capStyle; private final int joinStyle;
int joinStyle;
int miterLimit;
Transform4 transform; private final float m00, m01, m10, m11, det;
int m00, m01;
int m10, m11;
int lineWidth2; private final float lineWidth2;
long scaledLineWidth2; private final float scaledLineWidth2;
// For any pen offset (pen_dx, pen_dy) that does not depend on // For any pen offset (pen_dx, pen_dy) that does not depend on
// the line orientation, the pen should be transformed so that: // the line orientation, the pen should be transformed so that:
...@@ -88,143 +84,86 @@ public class Stroker extends LineSink { ...@@ -88,143 +84,86 @@ public class Stroker extends LineSink {
// //
// pen_dx'(r, theta) = r*(m00*cos(theta) + m01*sin(theta)) // pen_dx'(r, theta) = r*(m00*cos(theta) + m01*sin(theta))
// pen_dy'(r, theta) = r*(m10*cos(theta) + m11*sin(theta)) // pen_dy'(r, theta) = r*(m10*cos(theta) + m11*sin(theta))
int numPenSegments; private int numPenSegments;
int[] pen_dx; private final float[] pen_dx;
int[] pen_dy; private final float[] pen_dy;
boolean[] penIncluded; private boolean[] penIncluded;
int[] join; private final float[] join;
int[] offset = new int[2]; private final float[] offset = new float[2];
int[] reverse = new int[100]; private float[] reverse = new float[100];
int[] miter = new int[2]; private final float[] miter = new float[2];
long miterLimitSq; private final float miterLimitSq;
int prev; private int prev;
int rindex; private int rindex;
boolean started; private boolean started;
boolean lineToOrigin; private boolean lineToOrigin;
boolean joinToOrigin; private boolean joinToOrigin;
int sx0, sy0, sx1, sy1, x0, y0, x1, y1; private float sx0, sy0, sx1, sy1, x0, y0, px0, py0;
int mx0, my0, mx1, my1, omx, omy; private float mx0, my0, omx, omy;
int lx0, ly0, lx1, ly1, lx0p, ly0p, px0, py0;
private float m00_2_m01_2;
double m00_2_m01_2; private float m10_2_m11_2;
double m10_2_m11_2; private float m00_m10_m01_m11;
double m00_m10_m01_m11;
/**
* Empty constructor. <code>setOutput</code> and
* <code>setParameters</code> must be called prior to calling any
* other methods.
*/
public Stroker() {}
/** /**
* Constructs a <code>Stroker</code>. * Constructs a <code>Stroker</code>.
* *
* @param output an output <code>LineSink</code>. * @param output an output <code>LineSink</code>.
* @param lineWidth the desired line width in pixels, in S15.16 * @param lineWidth the desired line width in pixels
* format.
* @param capStyle the desired end cap style, one of * @param capStyle the desired end cap style, one of
* <code>CAP_BUTT</code>, <code>CAP_ROUND</code> or * <code>CAP_BUTT</code>, <code>CAP_ROUND</code> or
* <code>CAP_SQUARE</code>. * <code>CAP_SQUARE</code>.
* @param joinStyle the desired line join style, one of * @param joinStyle the desired line join style, one of
* <code>JOIN_MITER</code>, <code>JOIN_ROUND</code> or * <code>JOIN_MITER</code>, <code>JOIN_ROUND</code> or
* <code>JOIN_BEVEL</code>. * <code>JOIN_BEVEL</code>.
* @param miterLimit the desired miter limit, in S15.16 format. * @param miterLimit the desired miter limit
* @param transform a <code>Transform4</code> object indicating * @param transform a <code>Transform4</code> object indicating
* the transform that has been previously applied to all incoming * the transform that has been previously applied to all incoming
* coordinates. This is required in order to produce consistently * coordinates. This is required in order to produce consistently
* shaped end caps and joins. * shaped end caps and joins.
*/ */
public Stroker(LineSink output, public Stroker(LineSink output,
int lineWidth, float lineWidth,
int capStyle, int capStyle,
int joinStyle, int joinStyle,
int miterLimit, float miterLimit,
Transform4 transform) { float m00, float m01, float m10, float m11) {
setOutput(output);
setParameters(lineWidth, capStyle, joinStyle, miterLimit, transform);
}
/**
* Sets the output <code>LineSink</code> of this
* <code>Stroker</code>.
*
* @param output an output <code>LineSink</code>.
*/
public void setOutput(LineSink output) {
this.output = output; this.output = output;
}
/** this.lineWidth2 = lineWidth / 2;
* Sets the parameters of this <code>Stroker</code>. this.scaledLineWidth2 = m00 * lineWidth2;
* @param lineWidth the desired line width in pixels, in S15.16
* format.
* @param capStyle the desired end cap style, one of
* <code>CAP_BUTT</code>, <code>CAP_ROUND</code> or
* <code>CAP_SQUARE</code>.
* @param joinStyle the desired line join style, one of
* <code>JOIN_MITER</code>, <code>JOIN_ROUND</code> or
* <code>JOIN_BEVEL</code>.
* @param miterLimit the desired miter limit, in S15.16 format.
* @param transform a <code>Transform4</code> object indicating
* the transform that has been previously applied to all incoming
* coordinates. This is required in order to produce consistently
* shaped end caps and joins.
*/
public void setParameters(int lineWidth,
int capStyle,
int joinStyle,
int miterLimit,
Transform4 transform) {
this.lineWidth = lineWidth;
this.lineWidth2 = lineWidth >> 1;
this.scaledLineWidth2 = ((long)transform.m00*lineWidth2) >> 16;
this.capStyle = capStyle; this.capStyle = capStyle;
this.joinStyle = joinStyle; this.joinStyle = joinStyle;
this.miterLimit = miterLimit;
this.transform = transform; m00_2_m01_2 = m00*m00 + m01*m01;
this.m00 = transform.m00; m10_2_m11_2 = m10*m10 + m11*m11;
this.m01 = transform.m01; m00_m10_m01_m11 = m00*m10 + m01*m11;
this.m10 = transform.m10;
this.m11 = transform.m11;
this.m00_2_m01_2 = (double)m00*m00 + (double)m01*m01; this.m00 = m00;
this.m10_2_m11_2 = (double)m10*m10 + (double)m11*m11; this.m01 = m01;
this.m00_m10_m01_m11 = (double)m00*m10 + (double)m01*m11; this.m10 = m10;
this.m11 = m11;
det = m00*m11 - m01*m10;
double dm00 = m00/65536.0; float limit = miterLimit * lineWidth2 * det;
double dm01 = m01/65536.0; this.miterLimitSq = limit*limit;
double dm10 = m10/65536.0;
double dm11 = m11/65536.0;
double determinant = dm00*dm11 - dm01*dm10;
if (joinStyle == JOIN_MITER) { this.numPenSegments = (int)(3.14159f * lineWidth);
double limit = this.pen_dx = new float[numPenSegments];
(miterLimit/65536.0)*(lineWidth2/65536.0)*determinant; this.pen_dy = new float[numPenSegments];
double limitSq = limit*limit;
this.miterLimitSq = (long)(limitSq*65536.0*65536.0);
}
this.numPenSegments = (int)(3.14159f*lineWidth/65536.0f);
if (pen_dx == null || pen_dx.length < numPenSegments) {
this.pen_dx = new int[numPenSegments];
this.pen_dy = new int[numPenSegments];
this.penIncluded = new boolean[numPenSegments]; this.penIncluded = new boolean[numPenSegments];
this.join = new int[2*numPenSegments]; this.join = new float[2*numPenSegments];
}
for (int i = 0; i < numPenSegments; i++) { for (int i = 0; i < numPenSegments; i++) {
double r = lineWidth/2.0; double theta = (i * 2.0 * Math.PI)/numPenSegments;
double theta = (double)i*2.0*Math.PI/numPenSegments;
double cos = Math.cos(theta); double cos = Math.cos(theta);
double sin = Math.sin(theta); double sin = Math.sin(theta);
pen_dx[i] = (int)(r*(dm00*cos + dm01*sin)); pen_dx[i] = (float)(lineWidth2 * (m00*cos + m01*sin));
pen_dy[i] = (int)(r*(dm10*cos + dm11*sin)); pen_dy[i] = (float)(lineWidth2 * (m10*cos + m11*sin));
} }
prev = CLOSE; prev = CLOSE;
...@@ -233,32 +172,31 @@ public class Stroker extends LineSink { ...@@ -233,32 +172,31 @@ public class Stroker extends LineSink {
lineToOrigin = false; lineToOrigin = false;
} }
private void computeOffset(int x0, int y0, int x1, int y1, int[] m) { private void computeOffset(float x0, float y0,
long lx = (long)x1 - (long)x0; float x1, float y1, float[] m) {
long ly = (long)y1 - (long)y0; float lx = x1 - x0;
float ly = y1 - y0;
int dx, dy; float dx, dy;
if (m00 > 0 && m00 == m11 && m01 == 0 & m10 == 0) { if (m00 > 0 && m00 == m11 && m01 == 0 & m10 == 0) {
long ilen = PiscesMath.hypot(lx, ly); float ilen = (float)Math.hypot(lx, ly);
if (ilen == 0) { if (ilen == 0) {
dx = dy = 0; dx = dy = 0;
} else { } else {
dx = (int)( (ly*scaledLineWidth2)/ilen); dx = (ly * scaledLineWidth2)/ilen;
dy = (int)(-(lx*scaledLineWidth2)/ilen); dy = -(lx * scaledLineWidth2)/ilen;
} }
} else { } else {
double dlx = x1 - x0;
double dly = y1 - y0;
double det = (double)m00*m11 - (double)m01*m10;
int sdet = (det > 0) ? 1 : -1; int sdet = (det > 0) ? 1 : -1;
double a = dly*m00 - dlx*m10; float a = ly * m00 - lx * m10;
double b = dly*m01 - dlx*m11; float b = ly * m01 - lx * m11;
double dh = PiscesMath.hypot(a, b); float dh = (float)Math.hypot(a, b);
double div = sdet*lineWidth2/(65536.0*dh); float div = sdet * lineWidth2/dh;
double ddx = dly*m00_2_m01_2 - dlx*m00_m10_m01_m11;
double ddy = dly*m00_m10_m01_m11 - dlx*m10_2_m11_2; float ddx = ly * m00_2_m01_2 - lx * m00_m10_m01_m11;
dx = (int)(ddx*div); float ddy = ly * m00_m10_m01_m11 - lx * m10_2_m11_2;
dy = (int)(ddy*div); dx = ddx*div;
dy = ddy*div;
} }
m[0] = dx; m[0] = dx;
...@@ -267,58 +205,43 @@ public class Stroker extends LineSink { ...@@ -267,58 +205,43 @@ public class Stroker extends LineSink {
private void ensureCapacity(int newrindex) { private void ensureCapacity(int newrindex) {
if (reverse.length < newrindex) { if (reverse.length < newrindex) {
int[] tmp = new int[Math.max(newrindex, 6*reverse.length/5)]; reverse = java.util.Arrays.copyOf(reverse, 6*reverse.length/5);
System.arraycopy(reverse, 0, tmp, 0, rindex);
this.reverse = tmp;
} }
} }
private boolean isCCW(int x0, int y0, private boolean isCCW(float x0, float y0,
int x1, int y1, float x1, float y1,
int x2, int y2) { float x2, float y2) {
int dx0 = x1 - x0; return (x1 - x0) * (y2 - y1) < (y1 - y0) * (x2 - x1);
int dy0 = y1 - y0;
int dx1 = x2 - x1;
int dy1 = y2 - y1;
return (long)dx0*dy1 < (long)dy0*dx1;
} }
private boolean side(int x, int y, int x0, int y0, int x1, int y1) { private boolean side(float x, float y,
long lx = x; float x0, float y0,
long ly = y; float x1, float y1) {
long lx0 = x0; return (y0 - y1)*x + (x1 - x0)*y + (x0*y1 - x1*y0) > 0;
long ly0 = y0;
long lx1 = x1;
long ly1 = y1;
return (ly0 - ly1)*lx + (lx1 - lx0)*ly + (lx0*ly1 - lx1*ly0) > 0;
} }
private int computeRoundJoin(int cx, int cy, private int computeRoundJoin(float cx, float cy,
int xa, int ya, float xa, float ya,
int xb, int yb, float xb, float yb,
int side, int side,
boolean flip, boolean flip,
int[] join) { float[] join) {
int px, py; float px, py;
int ncoords = 0; int ncoords = 0;
boolean centerSide; boolean centerSide;
if (side == 0) { if (side == 0) {
centerSide = side(cx, cy, xa, ya, xb, yb); centerSide = side(cx, cy, xa, ya, xb, yb);
} else { } else {
centerSide = (side == 1) ? true : false; centerSide = (side == 1);
} }
for (int i = 0; i < numPenSegments; i++) { for (int i = 0; i < numPenSegments; i++) {
px = cx + pen_dx[i]; px = cx + pen_dx[i];
py = cy + pen_dy[i]; py = cy + pen_dy[i];
boolean penSide = side(px, py, xa, ya, xb, yb); boolean penSide = side(px, py, xa, ya, xb, yb);
if (penSide != centerSide) { penIncluded[i] = (penSide != centerSide);
penIncluded[i] = true;
} else {
penIncluded[i] = false;
}
} }
int start = -1, end = -1; int start = -1, end = -1;
...@@ -338,10 +261,10 @@ public class Stroker extends LineSink { ...@@ -338,10 +261,10 @@ public class Stroker extends LineSink {
} }
if (start != -1 && end != -1) { if (start != -1 && end != -1) {
long dxa = cx + pen_dx[start] - xa; float dxa = cx + pen_dx[start] - xa;
long dya = cy + pen_dy[start] - ya; float dya = cy + pen_dy[start] - ya;
long dxb = cx + pen_dx[start] - xb; float dxb = cx + pen_dx[start] - xb;
long dyb = cy + pen_dy[start] - yb; float dyb = cy + pen_dy[start] - yb;
boolean rev = (dxa*dxa + dya*dya > dxb*dxb + dyb*dyb); boolean rev = (dxa*dxa + dya*dya > dxb*dxb + dyb*dyb);
int i = rev ? end : start; int i = rev ? end : start;
...@@ -362,22 +285,25 @@ public class Stroker extends LineSink { ...@@ -362,22 +285,25 @@ public class Stroker extends LineSink {
return ncoords/2; return ncoords/2;
} }
private static final long ROUND_JOIN_THRESHOLD = 1000L; // pisces used to use fixed point arithmetic with 16 decimal digits. I
private static final long ROUND_JOIN_INTERNAL_THRESHOLD = 1000000000L; // didn't want to change the values of the constants below when I converted
// it to floating point, so that's why the divisions by 2^16 are there.
private static final float ROUND_JOIN_THRESHOLD = 1000/65536f;
private static final float ROUND_JOIN_INTERNAL_THRESHOLD = 1000000000/65536f;
private void drawRoundJoin(int x, int y, private void drawRoundJoin(float x, float y,
int omx, int omy, int mx, int my, float omx, float omy, float mx, float my,
int side, int side,
boolean flip, boolean flip,
boolean rev, boolean rev,
long threshold) { float threshold) {
if ((omx == 0 && omy == 0) || (mx == 0 && my == 0)) { if ((omx == 0 && omy == 0) || (mx == 0 && my == 0)) {
return; return;
} }
long domx = (long)omx - mx; float domx = omx - mx;
long domy = (long)omy - my; float domy = omy - my;
long len = domx*domx + domy*domy; float len = domx*domx + domy*domy;
if (len < threshold) { if (len < threshold) {
return; return;
} }
...@@ -389,10 +315,10 @@ public class Stroker extends LineSink { ...@@ -389,10 +315,10 @@ public class Stroker extends LineSink {
my = -my; my = -my;
} }
int bx0 = x + omx; float bx0 = x + omx;
int by0 = y + omy; float by0 = y + omy;
int bx1 = x + mx; float bx1 = x + mx;
int by1 = y + my; float by1 = y + my;
int npoints = computeRoundJoin(x, y, int npoints = computeRoundJoin(x, y,
bx0, by0, bx1, by1, side, flip, bx0, by0, bx1, by1, side, flip,
...@@ -404,40 +330,30 @@ public class Stroker extends LineSink { ...@@ -404,40 +330,30 @@ public class Stroker extends LineSink {
// Return the intersection point of the lines (ix0, iy0) -> (ix1, iy1) // Return the intersection point of the lines (ix0, iy0) -> (ix1, iy1)
// and (ix0p, iy0p) -> (ix1p, iy1p) in m[0] and m[1] // and (ix0p, iy0p) -> (ix1p, iy1p) in m[0] and m[1]
private void computeMiter(int ix0, int iy0, int ix1, int iy1, private void computeMiter(float x0, float y0, float x1, float y1,
int ix0p, int iy0p, int ix1p, int iy1p, float x0p, float y0p, float x1p, float y1p,
int[] m) { float[] m) {
long x0 = ix0; float x10 = x1 - x0;
long y0 = iy0; float y10 = y1 - y0;
long x1 = ix1; float x10p = x1p - x0p;
long y1 = iy1; float y10p = y1p - y0p;
long x0p = ix0p; float den = x10*y10p - x10p*y10;
long y0p = iy0p;
long x1p = ix1p;
long y1p = iy1p;
long x10 = x1 - x0;
long y10 = y1 - y0;
long x10p = x1p - x0p;
long y10p = y1p - y0p;
long den = (x10*y10p - x10p*y10) >> 16;
if (den == 0) { if (den == 0) {
m[0] = ix0; m[0] = x0;
m[1] = iy0; m[1] = y0;
return; return;
} }
long t = (x1p*(y0 - y0p) - x0*y10p + x0p*(y1p - y0)) >> 16; float t = x1p*(y0 - y0p) - x0*y10p + x0p*(y1p - y0);
m[0] = (int)(x0 + (t*x10)/den); m[0] = x0 + (t*x10)/den;
m[1] = (int)(y0 + (t*y10)/den); m[1] = y0 + (t*y10)/den;
} }
private void drawMiter(int px0, int py0, private void drawMiter(float px0, float py0,
int x0, int y0, float x0, float y0,
int x1, int y1, float x1, float y1,
int omx, int omy, int mx, int my, float omx, float omy, float mx, float my,
boolean rev) { boolean rev) {
if (mx == omx && my == omy) { if (mx == omx && my == omy) {
return; return;
...@@ -461,11 +377,11 @@ public class Stroker extends LineSink { ...@@ -461,11 +377,11 @@ public class Stroker extends LineSink {
miter); miter);
// Compute miter length in untransformed coordinates // Compute miter length in untransformed coordinates
long dx = (long)miter[0] - x0; float dx = miter[0] - x0;
long dy = (long)miter[1] - y0; float dy = miter[1] - y0;
long a = (dy*m00 - dx*m10) >> 16; float a = dy*m00 - dx*m10;
long b = (dy*m01 - dx*m11) >> 16; float b = dy*m01 - dx*m11;
long lenSq = a*a + b*b; float lenSq = a*a + b*b;
if (lenSq < miterLimitSq) { if (lenSq < miterLimitSq) {
emitLineTo(miter[0], miter[1], rev); emitLineTo(miter[0], miter[1], rev);
...@@ -473,7 +389,7 @@ public class Stroker extends LineSink { ...@@ -473,7 +389,7 @@ public class Stroker extends LineSink {
} }
public void moveTo(int x0, int y0) { public void moveTo(float x0, float y0) {
// System.out.println("Stroker.moveTo(" + x0/65536.0 + ", " + y0/65536.0 + ")"); // System.out.println("Stroker.moveTo(" + x0/65536.0 + ", " + y0/65536.0 + ")");
if (lineToOrigin) { if (lineToOrigin) {
...@@ -501,7 +417,7 @@ public class Stroker extends LineSink { ...@@ -501,7 +417,7 @@ public class Stroker extends LineSink {
this.joinSegment = true; this.joinSegment = true;
} }
public void lineTo(int x1, int y1) { public void lineTo(float x1, float y1) {
// System.out.println("Stroker.lineTo(" + x1/65536.0 + ", " + y1/65536.0 + ")"); // System.out.println("Stroker.lineTo(" + x1/65536.0 + ", " + y1/65536.0 + ")");
if (lineToOrigin) { if (lineToOrigin) {
...@@ -526,10 +442,10 @@ public class Stroker extends LineSink { ...@@ -526,10 +442,10 @@ public class Stroker extends LineSink {
joinSegment = false; joinSegment = false;
} }
private void lineToImpl(int x1, int y1, boolean joinSegment) { private void lineToImpl(float x1, float y1, boolean joinSegment) {
computeOffset(x0, y0, x1, y1, offset); computeOffset(x0, y0, x1, y1, offset);
int mx = offset[0]; float mx = offset[0];
int my = offset[1]; float my = offset[1];
if (!started) { if (!started) {
emitMoveTo(x0 + mx, y0 + my); emitMoveTo(x0 + mx, y0 + my);
...@@ -567,10 +483,6 @@ public class Stroker extends LineSink { ...@@ -567,10 +483,6 @@ public class Stroker extends LineSink {
emitLineTo(x0 - mx, y0 - my, true); emitLineTo(x0 - mx, y0 - my, true);
emitLineTo(x1 - mx, y1 - my, true); emitLineTo(x1 - mx, y1 - my, true);
lx0 = x1 + mx; ly0 = y1 + my;
lx0p = x1 - mx; ly0p = y1 - my;
lx1 = x1; ly1 = y1;
this.omx = mx; this.omx = mx;
this.omy = my; this.omy = my;
this.px0 = x0; this.px0 = x0;
...@@ -594,8 +506,8 @@ public class Stroker extends LineSink { ...@@ -594,8 +506,8 @@ public class Stroker extends LineSink {
} }
computeOffset(x0, y0, sx0, sy0, offset); computeOffset(x0, y0, sx0, sy0, offset);
int mx = offset[0]; float mx = offset[0];
int my = offset[1]; float my = offset[1];
// Draw penultimate join // Draw penultimate join
boolean ccw = isCCW(px0, py0, x0, y0, sx0, sy0); boolean ccw = isCCW(px0, py0, x0, y0, sx0, sy0);
...@@ -678,12 +590,10 @@ public class Stroker extends LineSink { ...@@ -678,12 +590,10 @@ public class Stroker extends LineSink {
this.prev = MOVE_TO; this.prev = MOVE_TO;
} }
long lineLength(long ldx, long ldy) { double userSpaceLineLength(double dx, double dy) {
long ldet = ((long)m00*m11 - (long)m01*m10) >> 16; double a = (dy*m00 - dx*m10)/det;
long la = ((long)ldy*m00 - (long)ldx*m10)/ldet; double b = (dy*m01 - dx*m11)/det;
long lb = ((long)ldy*m01 - (long)ldx*m11)/ldet; return Math.hypot(a, b);
long llen = (int)PiscesMath.hypot(la, lb);
return llen;
} }
private void finish() { private void finish() {
...@@ -692,13 +602,13 @@ public class Stroker extends LineSink { ...@@ -692,13 +602,13 @@ public class Stroker extends LineSink {
omx, omy, -omx, -omy, 1, false, false, omx, omy, -omx, -omy, 1, false, false,
ROUND_JOIN_THRESHOLD); ROUND_JOIN_THRESHOLD);
} else if (capStyle == CAP_SQUARE) { } else if (capStyle == CAP_SQUARE) {
long ldx = (long)(px0 - x0); float dx = px0 - x0;
long ldy = (long)(py0 - y0); float dy = py0 - y0;
long llen = lineLength(ldx, ldy); float len = (float)userSpaceLineLength(dx, dy);
long s = (long)lineWidth2*65536/llen; float s = lineWidth2/len;
int capx = x0 - (int)(ldx*s >> 16); float capx = x0 - dx*s;
int capy = y0 - (int)(ldy*s >> 16); float capy = y0 - dy*s;
emitLineTo(capx + omx, capy + omy); emitLineTo(capx + omx, capy + omy);
emitLineTo(capx - omx, capy - omy); emitLineTo(capx - omx, capy - omy);
...@@ -714,13 +624,13 @@ public class Stroker extends LineSink { ...@@ -714,13 +624,13 @@ public class Stroker extends LineSink {
-mx0, -my0, mx0, my0, 1, false, false, -mx0, -my0, mx0, my0, 1, false, false,
ROUND_JOIN_THRESHOLD); ROUND_JOIN_THRESHOLD);
} else if (capStyle == CAP_SQUARE) { } else if (capStyle == CAP_SQUARE) {
long ldx = (long)(sx1 - sx0); float dx = sx1 - sx0;
long ldy = (long)(sy1 - sy0); float dy = sy1 - sy0;
long llen = lineLength(ldx, ldy); float len = (float)userSpaceLineLength(dx, dy);
long s = (long)lineWidth2*65536/llen; float s = lineWidth2/len;
int capx = sx0 - (int)(ldx*s >> 16); float capx = sx0 - dx*s;
int capy = sy0 - (int)(ldy*s >> 16); float capy = sy0 - dy*s;
emitLineTo(capx - mx0, capy - my0); emitLineTo(capx - mx0, capy - my0);
emitLineTo(capx + mx0, capy + my0); emitLineTo(capx + mx0, capy + my0);
...@@ -730,17 +640,17 @@ public class Stroker extends LineSink { ...@@ -730,17 +640,17 @@ public class Stroker extends LineSink {
this.joinSegment = false; this.joinSegment = false;
} }
private void emitMoveTo(int x0, int y0) { private void emitMoveTo(float x0, float y0) {
// System.out.println("Stroker.emitMoveTo(" + x0/65536.0 + ", " + y0/65536.0 + ")"); // System.out.println("Stroker.emitMoveTo(" + x0/65536.0 + ", " + y0/65536.0 + ")");
output.moveTo(x0, y0); output.moveTo(x0, y0);
} }
private void emitLineTo(int x1, int y1) { private void emitLineTo(float x1, float y1) {
// System.out.println("Stroker.emitLineTo(" + x0/65536.0 + ", " + y0/65536.0 + ")"); // System.out.println("Stroker.emitLineTo(" + x0/65536.0 + ", " + y0/65536.0 + ")");
output.lineTo(x1, y1); output.lineTo(x1, y1);
} }
private void emitLineTo(int x1, int y1, boolean rev) { private void emitLineTo(float x1, float y1, boolean rev) {
if (rev) { if (rev) {
ensureCapacity(rindex + 2); ensureCapacity(rindex + 2);
reverse[rindex++] = x1; reverse[rindex++] = x1;
...@@ -755,3 +665,4 @@ public class Stroker extends LineSink { ...@@ -755,3 +665,4 @@ public class Stroker extends LineSink {
output.close(); output.close();
} }
} }
/*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.java2d.pisces;
public class Transform4 {
public int m00, m01, m10, m11;
// double det; // det*65536
public Transform4() {
this(1 << 16, 0, 0, 1 << 16);
}
public Transform4(int m00, int m01,
int m10, int m11) {
this.m00 = m00;
this.m01 = m01;
this.m10 = m10;
this.m11 = m11;
// this.det = (double)m00*m11 - (double)m01*m10;
}
// public Transform4 createInverse() {
// double dm00 = m00/65536.0;
// double dm01 = m01/65536.0;
// double dm10 = m10/65536.0;
// double dm11 = m11/65536.0;
// double invdet = 65536.0/(dm00*dm11 - dm01*dm10);
// int im00 = (int)( dm11*invdet);
// int im01 = (int)(-dm01*invdet);
// int im10 = (int)(-dm10*invdet);
// int im11 = (int)( dm00*invdet);
// return new Transform4(im00, im01, im10, im11);
// }
// public void transform(int[] point) {
// }
// /**
// * Returns the length of the line segment obtained by inverse
// * transforming the points <code>(x0, y0)</code> and <code>(x1,
// * y1)</code>.
// */
// public int getTransformedLength(int x0, int x1, int y0, int y1) {
// int lx = x1 - x0;
// int ly = y1 - y0;
// double a = (double)m00*ly - (double)m10*lx;
// double b = (double)m01*ly - (double)m11*lx;
// double len = PiscesMath.sqrt((a*a + b*b)/(det*det));
// return (int)(len*65536.0);
// }
// public int getType() {
// }
}
...@@ -46,8 +46,6 @@ import static java.awt.event.KeyEvent.*; ...@@ -46,8 +46,6 @@ import static java.awt.event.KeyEvent.*;
*/ */
public class JConsoleResources extends ListResourceBundle { public class JConsoleResources extends ListResourceBundle {
private static final String cr = System.getProperty("line.separator");
/** /**
* Returns the contents of this <code>ResourceBundle</code>. * Returns the contents of this <code>ResourceBundle</code>.
* *
...@@ -56,7 +54,7 @@ public class JConsoleResources extends ListResourceBundle { ...@@ -56,7 +54,7 @@ public class JConsoleResources extends ListResourceBundle {
* @return the contents of this <code>ResourceBundle</code>. * @return the contents of this <code>ResourceBundle</code>.
*/ */
protected Object[][] getContents0() { protected Object[][] getContents0() {
return new Object[][] { Object[][] temp = new Object[][] {
// NOTE 1: The value strings in this file containing "{0}" are // NOTE 1: The value strings in this file containing "{0}" are
// processed by the java.text.MessageFormat class. Any // processed by the java.text.MessageFormat class. Any
// single quotes appearing in these strings need to be // single quotes appearing in these strings need to be
...@@ -98,7 +96,7 @@ public class JConsoleResources extends ListResourceBundle { ...@@ -98,7 +96,7 @@ public class JConsoleResources extends ListResourceBundle {
{"Attributes","Attributes"}, {"Attributes","Attributes"},
{"Blank", "Blank"}, {"Blank", "Blank"},
{"BlockedCount WaitedCount", {"BlockedCount WaitedCount",
"Total blocked: {0} Total waited: {1}" + cr}, "Total blocked: {0} Total waited: {1}\n"},
{"Boot class path","Boot class path"}, {"Boot class path","Boot class path"},
{"BorderedComponent.moreOrLessButton.toolTip", "Toggle to show more or less information"}, {"BorderedComponent.moreOrLessButton.toolTip", "Toggle to show more or less information"},
{"CPU Usage","CPU Usage"}, {"CPU Usage","CPU Usage"},
...@@ -271,21 +269,21 @@ public class JConsoleResources extends ListResourceBundle { ...@@ -271,21 +269,21 @@ public class JConsoleResources extends ListResourceBundle {
{"Minimize All.mnemonic", 'M'}, {"Minimize All.mnemonic", 'M'},
{"Minus Version", "This is {0} version {1}"}, {"Minus Version", "This is {0} version {1}"},
{"Monitor locked", {"Monitor locked",
" - locked {0}" + cr}, " - locked {0}\n"},
{"Motif","Motif"}, {"Motif","Motif"},
{"Name Build and Mode","{0} (build {1}, {2})"}, {"Name Build and Mode","{0} (build {1}, {2})"},
{"Name and Build","{0} (build {1})"}, {"Name and Build","{0} (build {1})"},
{"Name","Name"}, {"Name","Name"},
{"Name: ","Name: "}, {"Name: ","Name: "},
{"Name State", {"Name State",
"Name: {0}" + cr + "Name: {0}\n" +
"State: {1}" + cr}, "State: {1}\n"},
{"Name State LockName", {"Name State LockName",
"Name: {0}" + cr + "Name: {0}\n" +
"State: {1} on {2}" + cr}, "State: {1} on {2}\n"},
{"Name State LockName LockOwner", {"Name State LockName LockOwner",
"Name: {0}" + cr + "Name: {0}\n" +
"State: {1} on {2} owned by: {3}" + cr}, "State: {1} on {2} owned by: {3}\n"},
{"New Connection...", "New Connection..."}, {"New Connection...", "New Connection..."},
{"New Connection....mnemonic", 'N'}, {"New Connection....mnemonic", 'N'},
{"New value applied","New value applied"}, {"New value applied","New value applied"},
...@@ -351,7 +349,7 @@ public class JConsoleResources extends ListResourceBundle { ...@@ -351,7 +349,7 @@ public class JConsoleResources extends ListResourceBundle {
{"Size Mb","{0} Mb"}, {"Size Mb","{0} Mb"},
{"Source","Source"}, {"Source","Source"},
{"Stack trace", {"Stack trace",
cr + "Stack trace: " + cr}, "\nStack trace: \n"},
{"Success:","Success:"}, {"Success:","Success:"},
// Note: SummaryTab.headerDateTimeFormat can be one the following: // Note: SummaryTab.headerDateTimeFormat can be one the following:
// 1. A combination of two styles for date and time, using the // 1. A combination of two styles for date and time, using the
...@@ -433,22 +431,27 @@ public class JConsoleResources extends ListResourceBundle { ...@@ -433,22 +431,27 @@ public class JConsoleResources extends ListResourceBundle {
{"plot", "plot"}, {"plot", "plot"},
{"visualize","visualize"}, {"visualize","visualize"},
{"zz usage text", {"zz usage text",
"Usage: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]" + cr + "Usage: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]\n\n" +
cr + " -interval Set the update interval to n seconds (default is 4 seconds)\n" +
" -interval Set the update interval to n seconds (default is 4 seconds)" + cr + " -notile Do not tile windows initially (for two or more connections)\n" +
" -notile Do not tile windows initially (for two or more connections)" + cr + " -pluginpath Specify the path that jconsole uses to look up the plugins\n\n" +
" -pluginpath Specify the path that jconsole uses to look up the plugins" + cr + " -version Print program version\n" +
" -version Print program version" + cr + " connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)\n" +
cr + " pid The process id of a target process\n" +
" connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)" + cr + " host A remote host name or IP address\n" +
" pid The process id of a target process" + cr + " port The port number for the remote connection\n\n" +
" host A remote host name or IP address" + cr + " -J Specify the input arguments to the Java virtual machine\n" +
" port The port number for the remote connection" + cr +
cr +
" -J Specify the input arguments to the Java virtual machine" + cr +
" on which jconsole is running"}, " on which jconsole is running"},
// END OF MATERIAL TO LOCALIZE // END OF MATERIAL TO LOCALIZE
}; };
String ls = System.getProperty("line.separator");
for(int i=0;i<temp.length;i++) {
temp[i][1] = temp[i][1].toString().replaceAll("\n",ls);
}
return temp;
} }
public synchronized Object[][] getContents() { public synchronized Object[][] getContents() {
......
...@@ -30,12 +30,14 @@ import java.util.ListResourceBundle; ...@@ -30,12 +30,14 @@ import java.util.ListResourceBundle;
public class MsgNative2ascii extends ListResourceBundle { public class MsgNative2ascii extends ListResourceBundle {
public Object[][] getContents() { public Object[][] getContents() {
return new Object[][] { Object[][] temp = new Object[][] {
{"err.bad.arg", "-encoding requires argument"}, {"err.bad.arg", "-encoding requires argument"},
{"err.cannot.read", "{0} could not be read."}, {"err.cannot.read", "{0} could not be read."},
{"err.cannot.write", "{0} could not be written."}, {"err.cannot.write", "{0} could not be written."},
{"usage", "Usage: native2ascii" + {"usage", "Usage: native2ascii" +
" [-reverse] [-encoding encoding] [inputfile [outputfile]]"}, " [-reverse] [-encoding encoding] [inputfile [outputfile]]"},
}; };
return temp;
} }
} }
/* /*
* Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
"Central European Summer Time", "CEST"}; "Central European Summer Time", "CEST"};
String CHAST[] = new String[] {"Chatham Standard Time", "CHAST", String CHAST[] = new String[] {"Chatham Standard Time", "CHAST",
"Chatham Daylight Time", "CHADT"}; "Chatham Daylight Time", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Central Indonesia Time", "CIT", String CIT[] = new String[] {"Central Indonesia Time", "CIT",
"Central Indonesia Summer Time", "CIST"}; "Central Indonesia Summer Time", "CIST"};
String CLT[] = new String[] {"Chile Time", "CLT", String CLT[] = new String[] {"Chile Time", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
"Pitcairn Daylight Time", "PDT"}; "Pitcairn Daylight Time", "PDT"};
String PKT[] = new String[] {"Pakistan Time", "PKT", String PKT[] = new String[] {"Pakistan Time", "PKT",
"Pakistan Summer Time", "PKST"}; "Pakistan Summer Time", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Pacific Standard Time", "PST", String PST[] = new String[] {"Pacific Standard Time", "PST",
"Pacific Daylight Time", "PDT"}; "Pacific Daylight Time", "PDT"};
String RST[] = new String[] {"Eastern Standard Time", "EST", String RST[] = new String[] {"Eastern Standard Time", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
"Eastern Summer Time (Tasmania)", "EST"}; "Eastern Summer Time (Tasmania)", "EST"};
String TMT[] = new String[] {"Turkmenistan Time", "TMT", String TMT[] = new String[] {"Turkmenistan Time", "TMT",
"Turkmenistan Summer Time", "TMST"}; "Turkmenistan Summer Time", "TMST"};
String TRUT[] = new String[] {"Truk Time", "TRUT",
"Truk Summer Time", "TRUST"};
String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT", String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
"Ulaanbaatar Summer Time", "ULAST"}; "Ulaanbaatar Summer Time", "ULAST"};
String WART[] = new String[] {"Western Argentine Time", "WART", String WART[] = new String[] {"Western Argentine Time", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -755,6 +758,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -755,6 +758,7 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Vanuatu Time", "VUT", {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT",
"Vanuatu Summer Time", "VUST"}}, "Vanuatu Summer Time", "VUST"}},
...@@ -793,8 +797,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -793,8 +797,8 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Palau Time", "PWT", {"Pacific/Palau", new String[] {"Palau Time", "PWT",
"Palau Summer Time", "PWST"}}, "Palau Summer Time", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ponape Time", "PONT", {"Pacific/Pohnpei", PONT},
"Ponape Summer Time", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT", {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT",
"Papua New Guinea Summer Time", "PGST"}}, "Papua New Guinea Summer Time", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT", {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT",
...@@ -807,12 +811,12 @@ public final class TimeZoneNames extends TimeZoneNamesBundle { ...@@ -807,12 +811,12 @@ public final class TimeZoneNames extends TimeZoneNamesBundle {
"Gilbert Is. Summer Time", "GILST"}}, "Gilbert Is. Summer Time", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT", {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT",
"Tonga Summer Time", "TOST"}}, "Tonga Summer Time", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Wake Time", "WAKT", {"Pacific/Wake", new String[] {"Wake Time", "WAKT",
"Wake Summer Time", "WAKST"}}, "Wake Summer Time", "WAKST"}},
{"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT", {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT",
"Wallis & Futuna Summer Time", "WFST"}}, "Wallis & Futuna Summer Time", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
"Mitteleurop\u00e4ische Sommerzeit", "MESZ"}; "Mitteleurop\u00e4ische Sommerzeit", "MESZ"};
String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST", String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST",
"Chatham Sommerzeit", "CHADT"}; "Chatham Sommerzeit", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT", String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT",
"Zentralindonesische Sommerzeit", "CIST"}; "Zentralindonesische Sommerzeit", "CIST"};
String CLT[] = new String[] {"Chilenische Zeit", "CLT", String CLT[] = new String[] {"Chilenische Zeit", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
"Pitcairn Sommerzeit", "PDT"}; "Pitcairn Sommerzeit", "PDT"};
String PKT[] = new String[] {"Pakistanische Zeit", "PKT", String PKT[] = new String[] {"Pakistanische Zeit", "PKT",
"Pakistanische Sommerzeit", "PKST"}; "Pakistanische Sommerzeit", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Pazifische Normalzeit", "PST", String PST[] = new String[] {"Pazifische Normalzeit", "PST",
"Pazifische Sommerzeit", "PDT"}; "Pazifische Sommerzeit", "PDT"};
String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST", String RST[] = new String[] {"\u00d6stliche Normalzeit", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
"\u00d6stliche Sommerzeit (Tasmanien)", "EST"}; "\u00d6stliche Sommerzeit (Tasmanien)", "EST"};
String TMT[] = new String[] {"Turkmenische Zeit", "TMT", String TMT[] = new String[] {"Turkmenische Zeit", "TMT",
"Turkmenische Sommerzeit", "TMST"}; "Turkmenische Sommerzeit", "TMST"};
String TRUT[] = new String[] {"Truk Zeit", "TRUT",
"Truk Sommerzeit", "TRUST"};
String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT", String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
"Ulaanbaatar Sommerzeit", "ULAST"}; "Ulaanbaatar Sommerzeit", "ULAST"};
String WART[] = new String[] {"Westargentinische Zeit", "WART", String WART[] = new String[] {"Westargentinische Zeit", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT", {"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT",
"Davis Sommerzeit", "DAVST"}}, "Davis Sommerzeit", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT",
"Dumont-d'Urville Sommerzeit", "DDUST"}}, "Dumont-d'Urville Sommerzeit", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT", {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT",
"Mawson Sommerzeit", "MAWST"}}, "Mawson Sommerzeit", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT", {"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT",
"Vanuatu Sommerzeit", "VUST"}}, "Vanuatu Sommerzeit", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Palau Zeit", "PWT", {"Pacific/Palau", new String[] {"Palau Zeit", "PWT",
"Palau Sommerzeit", "PWST"}}, "Palau Sommerzeit", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ponape Zeit", "PONT", {"Pacific/Pohnpei", PONT},
"Ponape Sommerzeit", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT", {"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT",
"Papua-Neuguinea Sommerzeit", "PGST"}}, "Papua-Neuguinea Sommerzeit", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT", {"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_de extends TimeZoneNamesBundle {
"Gilbert-Inseln Sommerzeit", "GILST"}}, "Gilbert-Inseln Sommerzeit", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT", {"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT",
"Tonga Sommerzeit", "TOST"}}, "Tonga Sommerzeit", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Wake Zeit", "WAKT", {"Pacific/Wake", new String[] {"Wake Zeit", "WAKT",
"Wake Sommerzeit", "WAKST"}}, "Wake Sommerzeit", "WAKST"}},
{"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT", {"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT",
"Wallis u. Futuna Sommerzeit", "WFST"}}, "Wallis u. Futuna Sommerzeit", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano de Europa Central", "CEST"}; "Hora de verano de Europa Central", "CEST"};
String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST", String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST",
"Hora de verano de Chatham", "CHADT"}; "Hora de verano de Chatham", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Hora de Indonesia Central", "CIT", String CIT[] = new String[] {"Hora de Indonesia Central", "CIT",
"Hora de verano de Indonesia Central", "CIST"}; "Hora de verano de Indonesia Central", "CIST"};
String CLT[] = new String[] {"Hora de Chile", "CLT", String CLT[] = new String[] {"Hora de Chile", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano de Pitcairn", "PDT"}; "Hora de verano de Pitcairn", "PDT"};
String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT", String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT",
"Hora de verano de Pakist\u00e1n", "PKST"}; "Hora de verano de Pakist\u00e1n", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST", String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
"Hora de verano del Pac\u00edfico", "PDT"}; "Hora de verano del Pac\u00edfico", "PDT"};
String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST", String RST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano del Este (Tasmania)", "EST"}; "Hora de verano del Este (Tasmania)", "EST"};
String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT", String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT",
"Hora de verano de Turkmenist\u00e1n", "TMST"}; "Hora de verano de Turkmenist\u00e1n", "TMST"};
String TRUT[] =new String[] {"Hora de Truk", "TRUT",
"Hora de verano de Truk", "TRUST"};
String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT", String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
"Hora de verano de Ulan Bator", "ULAST"}; "Hora de verano de Ulan Bator", "ULAST"};
String WART[] = new String[] {"Hora de Argentina Occidental", "WART", String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT", {"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT",
"Hora de verano de Davis", "DAVST"}}, "Hora de verano de Davis", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT",
"Hora de verano de Dumont-d'Urville", "DDUST"}}, "Hora de verano de Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT", {"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT",
"Hora de verano de Mawson", "MAWST"}}, "Hora de verano de Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -533,7 +539,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -533,7 +539,6 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano de Filipinas", "PHST"}}, "Hora de verano de Filipinas", "PHST"}},
{"Asia/Muscat", GST}, {"Asia/Muscat", GST},
{"Asia/Nicosia", EET}, {"Asia/Nicosia", EET},
{"Asia/Novokuznetsk", NOVT}, {"Asia/Novokuznetsk", NOVT},
{"Asia/Novosibirsk", NOVT}, {"Asia/Novosibirsk", NOVT},
{"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT", {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT",
...@@ -753,6 +758,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -753,6 +758,7 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT", {"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT",
"Hora de verano de Vanuatu", "VUST"}}, "Hora de verano de Vanuatu", "VUST"}},
...@@ -791,8 +797,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -791,8 +797,8 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Hora de Palau", "PWT", {"Pacific/Palau", new String[] {"Hora de Palau", "PWT",
"Hora de verano de Palau", "PWST"}}, "Hora de verano de Palau", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Hora de Ponape", "PONT", {"Pacific/Pohnpei", PONT},
"Hora de verano de Ponape", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT", {"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT",
"Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}}, "Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT", {"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT",
...@@ -805,12 +811,12 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle { ...@@ -805,12 +811,12 @@ public final class TimeZoneNames_es extends TimeZoneNamesBundle {
"Hora de verano de las islas Gilbert", "GILST"}}, "Hora de verano de las islas Gilbert", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT", {"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT",
"Hora de verano de Tonga", "TOST"}}, "Hora de verano de Tonga", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Hora de Wake", "WAKT", {"Pacific/Wake", new String[] {"Hora de Wake", "WAKT",
"Hora de verano de Wake", "WAKST"}}, "Hora de verano de Wake", "WAKST"}},
{"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT", {"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT",
"Hora de verano de Wallis y Futuna", "WFST"}}, "Hora de verano de Wallis y Futuna", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
"Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ; "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ;
String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST", String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST",
"Heure avanc\u00e9e de Chatham", "CHADT"}; "Heure avanc\u00e9e de Chatham", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT", String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT",
"Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"}; "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"};
String CLT[] = new String[] {"Heure du Chili", "CLT", String CLT[] = new String[] {"Heure du Chili", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
"heure avanc\u00e9e des Pitcairn", "PDT"}; "heure avanc\u00e9e des Pitcairn", "PDT"};
String PKT[] = new String[] {"Heure du Pakistan", "PKT", String PKT[] = new String[] {"Heure du Pakistan", "PKT",
"Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ; "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ;
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Heure normale du Pacifique", "PST", String PST[] = new String[] {"Heure normale du Pacifique", "PST",
"Heure avanc\u00e9e du Pacifique", "PDT"} ; "Heure avanc\u00e9e du Pacifique", "PDT"} ;
String RST[] = new String[] {"Heure normale de l'Est", "EST", String RST[] = new String[] {"Heure normale de l'Est", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
"Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"}; "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"};
String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT", String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
"Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ; "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ;
String TRUT[] = new String[] {"Heure de Truk", "TRUT",
"Heure d'\u00e9t\u00e9 de Truk", "TRUST"};
String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT", String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
"Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ; "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ;
String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART", String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT", {"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT",
"Heure d'\u00e9t\u00e9 de Davis", "DAVST"}}, "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT",
"Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}}, "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT", {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT",
"Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}}, "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT", {"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT",
"Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}}, "Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Heure de Palaos", "PWT", {"Pacific/Palau", new String[] {"Heure de Palaos", "PWT",
"Heure d'\u00e9t\u00e9 de Palaos", "PWST"}}, "Heure d'\u00e9t\u00e9 de Palaos", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Heure de Ponap\u00e9", "PONT", {"Pacific/Pohnpei", PONT},
"Heure d'\u00e9t\u00e9 de Ponap\u00e9", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT", {"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT",
"Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}}, "Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT", {"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
"Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}}, "Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT", {"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT",
"Heure d'\u00e9t\u00e9 de Tonga", "TOST"}}, "Heure d'\u00e9t\u00e9 de Tonga", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Heure de Wake", "WAKT", {"Pacific/Wake", new String[] {"Heure de Wake", "WAKT",
"Heure d'\u00e9t\u00e9 de Wake", "WAKST"}}, "Heure d'\u00e9t\u00e9 de Wake", "WAKST"}},
{"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT", {"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT",
"Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}}, "Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
"Ora estiva dell'Europa centrale", "CEST"}; "Ora estiva dell'Europa centrale", "CEST"};
String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST", String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST",
"Ora legale di Chatham", "CHADT"}; "Ora legale di Chatham", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT", String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT",
"Ora estiva dell'Indonesia centrale", "CIST"}; "Ora estiva dell'Indonesia centrale", "CIST"};
String CLT[] = new String[] {"Ora del Cile", "CLT", String CLT[] = new String[] {"Ora del Cile", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
"Ora legale di Pitcairn", "PDT"}; "Ora legale di Pitcairn", "PDT"};
String PKT[] = new String[] {"Ora del Pakistan", "PKT", String PKT[] = new String[] {"Ora del Pakistan", "PKT",
"Ora estiva del Pakistan", "PKST"}; "Ora estiva del Pakistan", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST", String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST",
"Ora legale della costa occidentale USA", "PDT"}; "Ora legale della costa occidentale USA", "PDT"};
String RST[] = new String[] {"Ora solare USA orientale", "EST", String RST[] = new String[] {"Ora solare USA orientale", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
"Ora estiva orientale (Tasmania)", "EST"}; "Ora estiva orientale (Tasmania)", "EST"};
String TMT[] = new String[] {"Ora del Turkmenistan", "TMT", String TMT[] = new String[] {"Ora del Turkmenistan", "TMT",
"Ora estiva del Turkmenistan", "TMST"}; "Ora estiva del Turkmenistan", "TMST"};
String TRUT[] = new String[] {"Ora di Truk", "TRUT",
"Ora estiva di Truk", "TRUST"};
String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT", String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
"Ora estiva di Ulaanbaatar", "ULAST"}; "Ora estiva di Ulaanbaatar", "ULAST"};
String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART", String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT", {"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT",
"Ora estiva di Davis", "DAVST"}}, "Ora estiva di Davis", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT",
"Ora estiva di Dumont-d'Urville", "DDUST"}}, "Ora estiva di Dumont-d'Urville", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT", {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT",
"Ora estiva di Mawson", "MAWST"}}, "Ora estiva di Mawson", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT", {"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT",
"Ora estiva di Vanuatu", "VUST"}}, "Ora estiva di Vanuatu", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Ora di Palau", "PWT", {"Pacific/Palau", new String[] {"Ora di Palau", "PWT",
"Ora estiva di Palau", "PWST"}}, "Ora estiva di Palau", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ora di Ponape", "PONT", {"Pacific/Pohnpei", PONT},
"Ora estiva di Ponape", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT", {"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT",
"Ora estiva di Papua Nuova Guinea", "PGST"}}, "Ora estiva di Papua Nuova Guinea", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT", {"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_it extends TimeZoneNamesBundle {
"Ora estiva delle Isole Gilbert", "GILST"}}, "Ora estiva delle Isole Gilbert", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT", {"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT",
"Ora estiva di Tonga", "TOST"}}, "Ora estiva di Tonga", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Ora di Wake", "WAKT", {"Pacific/Wake", new String[] {"Ora di Wake", "WAKT",
"Ora estiva di Wake", "WAKST"}}, "Ora estiva di Wake", "WAKST"}},
{"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT", {"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT",
"Ora estiva di Wallis e Futuna", "WFST"}}, "Ora estiva di Wallis e Futuna", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}; "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"};
String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST", String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST",
"\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"}; "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT", String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT",
"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"}; "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"};
String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT", String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
"\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"}; "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"};
String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT", String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT",
"\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"}; "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST", String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST",
"\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"}; "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST", String RST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
"\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"}; "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"};
String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT", String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT",
"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"}; "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
String TRUT[] = new String[] {"\u30c8\u30e9\u30c3\u30af\u6642\u9593", "TRUT",
"\u30c8\u30e9\u30c3\u30af\u590f\u6642\u9593", "TRUST"};
String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT", String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"}; "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"};
String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART", String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT", {"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT",
"\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}}, "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT", {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT",
"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}}, "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT", {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT",
"\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}}, "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT", {"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT",
"\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}}, "\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT", {"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT",
"\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}}, "\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"\u30dd\u30ca\u30da\u6642\u9593", "PONT", {"Pacific/Pohnpei", PONT},
"\u30dd\u30ca\u30da\u590f\u6642\u9593", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT", {"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT",
"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}}, "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}},
{"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT", {"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
"\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}}, "\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}},
{"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT", {"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT",
"\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}}, "\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT", {"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT",
"\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}}, "\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}},
{"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT", {"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT",
"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}}, "\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
"\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}; "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"};
String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST", String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST",
"Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"}; "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT", String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT",
"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"}; "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"};
String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT", String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
"Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT", String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT",
"\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"}; "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST", String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST",
"\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"}; "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST", String RST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
"\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"}; "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"};
String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT", String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT",
"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"}; "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
String TRUT[] = new String[] {"\ud2b8\ub8e8\ud06c \uc2dc\uac04", "TRUT",
"\ud2b8\ub8e8\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TRUST"};
String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT", String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"}; "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"};
String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART", String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT", {"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT",
"Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}}, "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT", {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT",
"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}}, "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT", {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT",
"\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}}, "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT", {"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT",
"\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}}, "\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT", {"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT",
"\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}}, "\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"\ud3ec\ub098\ud504 \uc2dc\uac04", "PONT", {"Pacific/Pohnpei", PONT},
"\ud3ec\ub098\ud504 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT", {"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT",
"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}}, "\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}},
{"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT", {"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
"\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}}, "\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}},
{"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT", {"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT",
"\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}}, "\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT", {"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT",
"\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}}, "\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}},
{"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT", {"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT",
"\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}}, "\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
"Centraleuropeisk sommartid", "CEST"}; "Centraleuropeisk sommartid", "CEST"};
String CHAST[] = new String[] {"Chatham, normaltid", "CHAST", String CHAST[] = new String[] {"Chatham, normaltid", "CHAST",
"Chatham, sommartid", "CHADT"}; "Chatham, sommartid", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Centralindonesisk tid", "CIT", String CIT[] = new String[] {"Centralindonesisk tid", "CIT",
"Centralindonesisk sommartid", "CIST"}; "Centralindonesisk sommartid", "CIST"};
String CLT[] = new String[] {"Chile, normaltid", "CLT", String CLT[] = new String[] {"Chile, normaltid", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
"Pitcairn, sommartid", "PDT"}; "Pitcairn, sommartid", "PDT"};
String PKT[] = new String[] {"Pakistan, normaltid", "PKT", String PKT[] = new String[] {"Pakistan, normaltid", "PKT",
"Pakistan, sommartid", "PKST"}; "Pakistan, sommartid", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Stilla havet, normaltid", "PST", String PST[] = new String[] {"Stilla havet, normaltid", "PST",
"Stilla havet, sommartid", "PDT"}; "Stilla havet, sommartid", "PDT"};
String RST[] = new String[] {"Eastern, normaltid", "EST", String RST[] = new String[] {"Eastern, normaltid", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
"Eastern, sommartid (Tasmanien)", "EST"}; "Eastern, sommartid (Tasmanien)", "EST"};
String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT", String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT",
"Turkmenistan, sommartid", "TMST"}; "Turkmenistan, sommartid", "TMST"};
String TRUT[] = new String[] {"Truk, normaltid", "TRUT",
"Truk, sommartid", "TRUST"};
String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT", String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
"Ulaanbaatar, sommartid", "ULAST"}; "Ulaanbaatar, sommartid", "ULAST"};
String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART", String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT", {"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT",
"Davis, sommartid", "DAVST"}}, "Davis, sommartid", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT",
"Dumont-d'Urville, sommartid", "DDUST"}}, "Dumont-d'Urville, sommartid", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT", {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT",
"Mawson, sommartid", "MAWST"}}, "Mawson, sommartid", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT", {"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT",
"Vanuatu, sommartid", "VUST"}}, "Vanuatu, sommartid", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"Palau, normaltid", "PWT", {"Pacific/Palau", new String[] {"Palau, normaltid", "PWT",
"Palau, sommartid", "PWST"}}, "Palau, sommartid", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ponape, normaltid", "PONT", {"Pacific/Pohnpei", PONT},
"Ponape, sommartid", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT", {"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT",
"Papua Nya Guinea, sommartid", "PGST"}}, "Papua Nya Guinea, sommartid", "PGST"}},
{"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT", {"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
"Gilbert\u00f6arna, sommartid", "GILST"}}, "Gilbert\u00f6arna, sommartid", "GILST"}},
{"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT", {"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT",
"Tonga, sommartid", "TOST"}}, "Tonga, sommartid", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT", {"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT",
"Wake, sommartid", "WAKST"}}, "Wake, sommartid", "WAKST"}},
{"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT", {"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT",
"Wallis & Futuna, sommartid", "WFST"}}, "Wallis & Futuna, sommartid", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
"\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}; "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"};
String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST", String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST",
"\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"}; "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT", String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT",
"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"}; "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"};
String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT", String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
"\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"}; "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"};
String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT", String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT",
"\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"}; "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST", String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST",
"\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"}; "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST", String RST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
"\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"}; "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"};
String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT", String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT",
"\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"}; "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
String TRUT[] = new String[] {"\u7279\u9c81\u514b\u65f6\u95f4", "TRUT",
"\u7279\u9c81\u514b\u590f\u4ee4\u65f6", "TRUST"};
String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT", String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
"\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"}; "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"};
String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART", String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT", {"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT",
"\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}}, "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT",
"Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}}, "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT", {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT",
"\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}}, "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -752,6 +758,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -752,6 +758,7 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT", {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT",
"\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}}, "\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}},
...@@ -790,8 +797,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -790,8 +797,8 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT", {"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT",
"\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}}, "\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ponape \u65f6\u95f4", "PONT", {"Pacific/Pohnpei", PONT},
"Ponape \u590f\u4ee4\u65f6", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT", {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT",
"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}}, "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}},
{"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT", {"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT",
...@@ -804,12 +811,12 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle { ...@@ -804,12 +811,12 @@ public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
"\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}}, "\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}},
{"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT", {"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT",
"\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}}, "\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT", {"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT",
"\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}}, "\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}},
{"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT", {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT",
"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}}, "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
/* /*
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -75,6 +75,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -75,6 +75,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
"\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}; "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"};
String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST", String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST",
"\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"}; "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT", String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT",
"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"}; "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"};
String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT", String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT",
...@@ -153,6 +155,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -153,6 +155,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
"\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT", String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT",
"\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"}; "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST", String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST",
"\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"}; "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST", String RST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST",
...@@ -169,8 +173,6 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -169,8 +173,6 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
"\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"}; "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"};
String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT", String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT",
"\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"}; "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
String TRUT[] = new String[] {"\u7279\u9b6f\u514b\u6642\u9593", "TRUT",
"\u7279\u9b6f\u514b\u590f\u4ee4\u6642\u9593", "TRUST"};
String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT", String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
"\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"}; "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"};
String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART", String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
...@@ -309,6 +311,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -309,6 +311,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"America/Atikokan", EST}, {"America/Atikokan", EST},
{"America/Atka", HAST}, {"America/Atka", HAST},
{"America/Bahia", BRT}, {"America/Bahia", BRT},
{"America/Bahia_Banderas", CST},
{"America/Barbados", AST}, {"America/Barbados", AST},
{"America/Belem", BRT}, {"America/Belem", BRT},
{"America/Belize", CST}, {"America/Belize", CST},
...@@ -446,10 +449,13 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -446,10 +449,13 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"America/Winnipeg", CST}, {"America/Winnipeg", CST},
{"America/Yakutat", AKST}, {"America/Yakutat", AKST},
{"America/Yellowknife", MST}, {"America/Yellowknife", MST},
{"Antarctica/Casey", WST_AUS},
{"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT", {"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT",
"\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}}, "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}},
{"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT", {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT",
"Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}}, "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}},
{"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
"Macquarie Island Summer Time", "MIST"}},
{"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT", {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT",
"\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}}, "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}},
{"Antarctica/McMurdo", NZST}, {"Antarctica/McMurdo", NZST},
...@@ -753,6 +759,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -753,6 +759,7 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"Pacific/Apia", WST_SAMOA}, {"Pacific/Apia", WST_SAMOA},
{"Pacific/Auckland", NZST}, {"Pacific/Auckland", NZST},
{"Pacific/Chatham", CHAST}, {"Pacific/Chatham", CHAST},
{"Pacific/Chuuk", CHUT},
{"Pacific/Easter", EASTER}, {"Pacific/Easter", EASTER},
{"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT", {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT",
"\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}}, "\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}},
...@@ -791,8 +798,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -791,8 +798,8 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
{"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT", {"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT",
"\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}}, "\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}},
{"Pacific/Pitcairn", PITCAIRN}, {"Pacific/Pitcairn", PITCAIRN},
{"Pacific/Ponape", new String[] {"Ponape \u6642\u9593", "PONT", {"Pacific/Pohnpei", PONT},
"Ponape \u590f\u4ee4\u6642\u9593", "PONST"}}, {"Pacific/Ponape", PONT},
{"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT", {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT",
"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}}, "\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}},
{"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT", {"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT",
...@@ -805,12 +812,12 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle { ...@@ -805,12 +812,12 @@ public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
"\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}}, "\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}},
{"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT", {"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT",
"\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}}, "\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}},
{"Pacific/Truk", TRUT}, {"Pacific/Truk", CHUT},
{"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT", {"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT",
"\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}}, "\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}},
{"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT", {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT",
"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}}, "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}},
{"Pacific/Yap", TRUT}, {"Pacific/Yap", CHUT},
{"Poland", CET}, {"Poland", CET},
{"PRC", CTT}, {"PRC", CTT},
{"PST8PDT", PST}, {"PST8PDT", PST},
......
...@@ -105,15 +105,15 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, ...@@ -105,15 +105,15 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
exit(1); exit(1);
} }
/* Do this before we read jvm.cfg */
EnsureJreInstallation(jrepath);
/* Find out where the JRE is that we will be using. */ /* Find out where the JRE is that we will be using. */
if (!GetJREPath(jrepath, so_jrepath)) { if (!GetJREPath(jrepath, so_jrepath)) {
JLI_ReportErrorMessage(JRE_ERROR1); JLI_ReportErrorMessage(JRE_ERROR1);
exit(2); exit(2);
} }
/* Do this before we read jvm.cfg and after jrepath is initialized */
EnsureJreInstallation(jrepath);
/* Find the specified JVM type */ /* Find the specified JVM type */
if (ReadKnownVMs(jrepath, (char*)GetArch(), JNI_FALSE) < 1) { if (ReadKnownVMs(jrepath, (char*)GetArch(), JNI_FALSE) < 1) {
JLI_ReportErrorMessage(CFG_ERROR7); JLI_ReportErrorMessage(CFG_ERROR7);
...@@ -213,6 +213,7 @@ EnsureJreInstallation(const char* jrepath) ...@@ -213,6 +213,7 @@ EnsureJreInstallation(const char* jrepath)
} }
/* Does our bundle directory exist ? */ /* Does our bundle directory exist ? */
JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\lib\\bundles", jrepath); JLI_Snprintf(tmpbuf, sizeof(tmpbuf), "%s\\lib\\bundles", jrepath);
JLI_TraceLauncher("EnsureJreInstallation: %s\n", tmpbuf);
if (stat(tmpbuf, &s) != 0) { if (stat(tmpbuf, &s) != 0) {
return; return;
} }
......
...@@ -23,19 +23,22 @@ ...@@ -23,19 +23,22 @@
/* /*
* @test * @test
* @bug 6856415 * @bug 6856415 6981001
* @summary Checks to ensure that proper exceptions are thrown by java * @summary Miscellaneous tests, Exceptions, EnsureJRE etc.
* @compile -XDignore.symbol.file VerifyExceptions.java TestHelper.java * @compile -XDignore.symbol.file MiscTests.java TestHelper.java
* @run main VerifyExceptions * @run main MiscTests
*/ */
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
public class VerifyExceptions { public class MiscTests {
// 6856415: Checks to ensure that proper exceptions are thrown by java
static void test6856415() { static void test6856415() {
// No pkcs library on win-x64, so we bail out. // No pkcs library on win-x64, so we bail out.
if (TestHelper.is64Bit && TestHelper.isWindows) { if (TestHelper.is64Bit && TestHelper.isWindows) {
...@@ -53,13 +56,35 @@ public class VerifyExceptions { ...@@ -53,13 +56,35 @@ public class VerifyExceptions {
} catch (FileNotFoundException fnfe) { } catch (FileNotFoundException fnfe) {
throw new RuntimeException(fnfe); throw new RuntimeException(fnfe);
} }
TestHelper.TestResult tr = TestHelper.doExec(TestHelper.javacCmd, TestHelper.TestResult tr = TestHelper.doExec(TestHelper.javaCmd,
"-Djava.security.manager", "-jar", testJar.getName(), "foo.bak"); "-Djava.security.manager", "-jar", testJar.getName(), "foo.bak");
tr.checkNegative(); for (String s : tr.testOutput) {
tr.contains("Exception in thread \"main\" java.security.AccessControlException: access denied (\"java.lang.RuntimePermission\" \"accessClassInPackage.sun.security.pkcs11\")\")"); System.out.println(s);
}
if (!tr.contains("java.security.AccessControlException:" +
" access denied (\"java.lang.RuntimePermission\"" +
" \"accessClassInPackage.sun.security.pkcs11\")")) {
System.out.println(tr.status);
}
}
// 6981001 : Check EnsureJreInstallation is ok, note we cannot
// thoroughly test this function, we simply do our best.
static void test6981001() {
if (TestHelper.is64Bit || !TestHelper.isWindows) {
return;
}
Map<String, String> env = new HashMap<String, String>();
env.put("_JAVA_LAUNCHER_DEBUG", "true");
TestHelper.TestResult tr = TestHelper.doExec(env, TestHelper.javaCmd);
if (!tr.contains(TestHelper.JAVAHOME + "\\lib\\bundles")) {
System.out.println(tr.status);
}
} }
public static void main(String... args) { public static void main(String... args) {
test6856415(); test6856415();
test6981001();
if (TestHelper.testExitValue != 0) {
throw new Error(TestHelper.testExitValue + " tests failed");
} }
} }
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册