| Previous CloneSet | Next CloneSet | Back to Main Report |
| Clone Mass | Clones in CloneSet | Parameter Count | Clone Similarity | Syntax Category [Sequence Length] |
|---|---|---|---|---|
| 195 | 2 | 6 | 0.973 | SourceElements[7] |
| Clone Abstraction | Parameter Bindings |
| Clone Instance (Click to see clone) | Line Count | Source Line | Source File |
|---|---|---|---|
| 1 | 202 | 693 | Closure/closure/goog/i18n/datetimeparse.js |
| 2 | 195 | 701 | Closure/closure/goog/locale/datetimeparse.js |
| ||||
/**
* Parse Day of week field.
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.i18n.DateTimeParse.prototype.subParseDayOfWeek_=
function (text, pos, cal){
// Handle both short and long forms.
// Try count == 4 (DDDD) first:
var value= this.matchString_(text, pos, goog.i18n.DateTimeSymbols.WEEKDAYS);
if (value< 0) {
value= this.matchString_(text, pos,
goog.i18n.DateTimeSymbols.SHORTWEEKDAYS);
}
if (value< 0) {
return false;
}
cal.dayOfWeek= value;
return true;
} ;
/**
* Parse fractional seconds field.
*
* @param {number} value parsed numberic value.
* @param {Array.<number>} pos current parse position.
* @param {number} start where this field start.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.i18n.DateTimeParse.prototype.subParseFractionalSeconds_=
function (value, pos, start, cal){
// Fractional seconds left-justify
var len= pos[0]- start;
cal.milliseconds= len< 3
? value* Math.pow(10, 3- len)
: Math.round(value/ Math.pow(10, len- 3));
return true;
} ;
/**
* Parse GMT type timezone.
*
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.i18n.DateTimeParse.prototype.subparseTimeZoneInGMT_=
function (text, pos, cal){
// First try to parse generic forms such as GMT-07:00. Do this first
// in case localized DateFormatZoneData contains the string "GMT"
// for a zone; in that case, we don't want to match the first three
// characters of GMT+/-HH:MM etc.
// For time zones that have no known names, look for strings
// of the form:
// GMT[+-]hours:minutes or
// GMT[+-]hhmm or
// GMT.
if (text.indexOf('GMT', pos[0])== pos[0]) {
pos[0]+= 3; // 3 is the length of GMT
return this.parseTimeZoneOffset_(text, pos, cal);
}
// TODO: check for named time zones by looking through the locale
// data from the DateFormatZoneData strings. should parse both short and long
// forms.
// subParseZoneString(text, start, cal);
// As a last resort, look for numeric timezones of the form
// [+-]hhmm as specified by RFC 822. This code is actually
// a little more permissive than RFC 822. It will try to do
// its best with numbers that aren't strictly 4 digits long.
return this.parseTimeZoneOffset_(text, pos, cal);
} ;
/**
* Parse time zone offset.
*
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.i18n.DateTimeParse.prototype.parseTimeZoneOffset_=
function (text, pos, cal){
if (pos[0]>= text.length) {
cal.tzOffset= 0;
return true;
}
var sign= 1;
switch (text.charAt(pos[0]))
{ case '-': sign= -1; // fall through
case '+': pos[0]++; }
// Look for hours:minutes or hhmm.
var st= pos[0];
var value= this.parseInt_(text, pos);
if (value== 0
&& pos[0]== st) {
return false;
}
var offset;
if (pos[0]< text.length
&& text.charAt(pos[0])== ':') {
// This is the hours:minutes case
offset= value* 60;
pos[0]++;
st= pos[0];
value= this.parseInt_(text, pos);
if (value== 0
&& pos[0]== st) {
return false;
}
offset+= value;
}
else {
// This is the hhmm case.
offset= value;
// Assume "-23".."+23" refers to hours.
if (offset< 24
&& (pos[0]- st)<= 2) {
offset *= 60;
}
else {
// todo: this looks questionable, should have more error checking
offset= offset% 100+ offset/ 100* 60;
}
}
offset *= sign;
cal.tzOffset= -offset;
return true;
} ;
/**
* Parse a integer string and return integer value.
*
* @param {string} text string being parsed.
* @param {Array.<number>} pos parse position.
*
* @return {number} Converted integer value.
* @private
*/
goog.i18n.DateTimeParse.prototype.parseInt_= function (text, pos){
var m= text.substring(pos[0]).match(/^\d+/);
if (!m) {
return -1;
}
pos[0]+= m[0].length;
return parseInt(m[0], 10);
} ;
/**
* Attempt to match the text at a given position against an array of strings.
* Since multiple strings in the array may match (for example, if the array
* contains "a", "ab", and "abc", all will match the input string "abcd") the
* longest match is returned.
*
* @param {string} text The string to match to.
* @param {Array.<number>} pos parsing position.
* @param {Array.<string>} data The string array of matching patterns.
*
* @return {number} the new start position if matching succeeded; a negative
* number indicating matching failure.
* @private
*/
goog.i18n.DateTimeParse.prototype.matchString_= function (text, pos, data){
// There may be multiple strings in the data[] array which begin with
// the same prefix (e.g., Cerven and Cervenec (June and July) in Czech).
// We keep track of the longest match, and return that. Note that this
// unfortunately requires us to test all array elements.
var bestMatchLength= 0;
var bestMatch= -1;
var lower_text= text.substring(pos[0]).toLowerCase( );
for (var i= 0; i< data.length; i++) {
var len= data[i].length;
// Always compare if we have no match yet; otherwise only compare
// against potentially better matches (longer strings).
if (len> bestMatchLength
&&lower_text.indexOf(data[i].toLowerCase( ))== 0)
{
bestMatch= i;
bestMatchLength= len;
}
}
if (bestMatch>= 0) {
pos[0]+= bestMatchLength;
}
return bestMatch;
} ;
/**
* This class hold the intermediate parsing result. After all fields are
* consumed, final result will be resolved from this class.
* @constructor
* @private
*/
goog.i18n.DateTimeParse.MyDate_= function ( )
{} ;
|
| ||||
/**
* Parse Day of week field.
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.locale.DateTimeParse.prototype.subParseDayOfWeek_=
function (text, pos, cal){
// Handle both short and long forms.
// Try count == 4 (DDDD) first:
var value= this.matchString_(text, pos, this.symbols_.WEEKDAYS);
if (value< 0) {
value= this.matchString_(text, pos, this.symbols_.SHORTWEEKDAYS);
}
if (value< 0) {
return false;
}
cal.dayOfWeek= value;
return true;
} ;
/**
* Parse fractional seconds field.
*
* @param {number} value parsed numberic value.
* @param {Array} pos current parse position.
* @param {number} start where this field start.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.locale.DateTimeParse.prototype.subParseFractionalSeconds_=
function (value, pos, start, cal){
// Fractional seconds left-justify
var len= pos[0]- start;
cal.milliseconds= len< 3
? value* Math.pow(10, 3- len)
: Math.round(value/ Math.pow(10, len- 3));
return true;
} ;
/**
* Parse GMT type timezone.
*
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.locale.DateTimeParse.prototype.subparseTimeZoneInGMT_=
function (text, pos, cal){
// First try to parse generic forms such as GMT-07:00. Do this first
// in case localized DateFormatZoneData contains the string "GMT"
// for a zone; in that case, we don't want to match the first three
// characters of GMT+/-HH:MM etc.
// For time zones that have no known names, look for strings
// of the form:
// GMT[+-]hours:minutes or
// GMT[+-]hhmm or
// GMT.
if (text.indexOf('GMT', pos[0])== pos[0]) {
pos[0]+= 3; // 3 is the length of GMT
return this.parseTimeZoneOffset_(text, pos, cal);
}
// TODO: check for named time zones by looking through the locale
// data from the DateFormatZoneData strings. should parse both short and long
// forms.
// subParseZoneString(text, start, cal);
// As a last resort, look for numeric timezones of the form
// [+-]hhmm as specified by RFC 822. This code is actually
// a little more permissive than RFC 822. It will try to do
// its best with numbers that aren't strictly 4 digits long.
return this.parseTimeZoneOffset_(text, pos, cal);
} ;
/**
* Parse time zone offset.
*
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog.locale.DateTimeParse.prototype.parseTimeZoneOffset_=
function (text, pos, cal){
if (pos[0]>= text.length) {
cal.tzOffset= 0;
return true;
}
var sign= 1;
switch (text.charAt(pos[0]))
{ case '-': sign= -1; // fall through
case '+': pos[0]++; }
// Look for hours:minutes or hhmm.
var st= pos[0];
var value= this.parseInt_(text, pos);
if (value== 0
&& pos[0]== st) {
return false;
}
var offset;
if (pos[0]< text.length
&& text.charAt(pos[0])== ':') {
// This is the hours:minutes case
offset= value* 60;
pos[0]++;
st= pos[0];
value= this.parseInt_(text, pos);
if (value== 0
&& pos[0]== st) {
return false;
}
offset+= value;
}
else {
// This is the hhmm case.
offset= value;
// Assume "-23".."+23" refers to hours.
if (offset< 24
&& (pos[0]- st)<= 2)
offset *= 60;
else
// todo: this looks questionable, should have more error checking
offset= offset% 100+ offset/ 100* 60;
}
offset *= sign;
cal.tzOffset= -offset;
return true;
} ;
/**
* Parse a integer string and return integer value.
*
* @param {string} text string being parsed.
* @param {Array} pos parse position.
*
* @return {number} Converted integer value.
* @private
*/
goog.locale.DateTimeParse.prototype.parseInt_= function (text, pos){
var m= text.substring(pos[0]).match(/^\d+/);
if (!m) {
return -1;
}
pos[0]+= m[0].length;
return parseInt(m[0], 10);
} ;
/**
* Attempt to match the text at a given position against an array of strings.
* Since multiple strings in the array may match (for example, if the array
* contains "a", "ab", and "abc", all will match the input string "abcd") the
* longest match is returned.
*
* @param {string} text The string to match to.
* @param {Array} pos parsing position.
* @param {Array} data The string array that is used to found match from.
*
* @return {number} the new start position if matching succeeded; a negative
* number indicating matching failure.
* @private
*/
goog.locale.DateTimeParse.prototype.matchString_= function (text, pos, data){
// There may be multiple strings in the data[] array which begin with
// the same prefix (e.g., Cerven and Cervenec (June and July) in Czech).
// We keep track of the longest match, and return that. Note that this
// unfortunately requires us to test all array elements.
var bestMatchLength= 0;
var bestMatch= -1;
var lower_text= text.substring(pos[0]).toLowerCase( );
for (var i= 0; i< data.length; ++i) {
var len= data[i].length;
// Always compare if we have no match yet; otherwise only compare
// against potentially better matches (longer strings).
if (len> bestMatchLength
&&lower_text.indexOf(data[i].toLowerCase( ))== 0)
{
bestMatch= i;
bestMatchLength= len;
}
}
if (bestMatch>= 0) {
pos[0]+= bestMatchLength;
}
return bestMatch;
} ;
/**
* This class hold the intermediate parsing result. After all fields are
* consumed, final result will be resolved from this class.
* @constructor
* @private
*/
goog.locale.DateTimeParse.MyDate_= function ( )
{} ;
|
| |||
/**
* Parse Day of week field.
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
/**
* Parse Day of week field.
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.subParseDayOfWeek_= function (text,pos,cal)
{
// Handle both short and long forms.
// Try count == 4 (DDDD) first:
var value=this.matchString_(text,pos, [[#variable20b9c900]]. [[#variable20b9c740]].WEEKDAYS);
if (value<0)
{ value=this.matchString_(text,pos, [[#variable20b9c900]]. [[#variable20b9c740]].SHORTWEEKDAYS);
}
if (value<0)
{ return false;
}
cal.dayOfWeek=value;
return true;
} ;
/**
* Parse fractional seconds field.
*
* @param {number} value parsed numberic value.
* @param {Array} pos current parse position.
* @param {number} start where this field start.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
/**
* Parse fractional seconds field.
*
* @param {number} value parsed numberic value.
* @param {Array.<number>} pos current parse position.
* @param {number} start where this field start.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.subParseFractionalSeconds_= function (value,pos,start,cal)
{
// Fractional seconds left-justify
var len=pos[0]-start;
cal.milliseconds=len<3
?value*Math.pow(10,3-len)
:Math.round(value/Math.pow(10,len-3));
return true;
} ;
/**
* Parse GMT type timezone.
*
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
/**
* Parse GMT type timezone.
*
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.subparseTimeZoneInGMT_= function (text,pos,cal)
{
// First try to parse generic forms such as GMT-07:00. Do this first
// in case localized DateFormatZoneData contains the string "GMT"
// for a zone; in that case, we don't want to match the first three
// characters of GMT+/-HH:MM etc.
// For time zones that have no known names, look for strings
// of the form:
// GMT[+-]hours:minutes or
// GMT[+-]hhmm or
// GMT.
if (text.indexOf('GMT',pos[0])==pos[0])
{ pos[0]+=3; // 3 is the length of GMT
return this.parseTimeZoneOffset_(text,pos,cal);
}
// TODO: check for named time zones by looking through the locale
// data from the DateFormatZoneData strings. should parse both short and long
// forms.
// subParseZoneString(text, start, cal);
// As a last resort, look for numeric timezones of the form
// [+-]hhmm as specified by RFC 822. This code is actually
// a little more permissive than RFC 822. It will try to do
// its best with numbers that aren't strictly 4 digits long.
return this.parseTimeZoneOffset_(text,pos,cal);
} ;
/**
* Parse time zone offset.
*
* @param {string} text the time text to be parsed.
* @param {Array} pos Parse position.
* @param {Object} cal MyDate_ object that holds parsed value.
*
* @return {boolean} True if successful.
* @private
*/
/**
* Parse time zone offset.
*
* @param {string} text the time text to be parsed.
* @param {Array.<number>} pos Parse position.
* @param {goog.i18n.DateTimeParse.MyDate_} cal object to hold parsed value.
*
* @return {boolean} True if successful.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.parseTimeZoneOffset_= function (text,pos,cal)
{ if (pos[0]>=text.length)
{ cal.tzOffset=0;
return true;
}
var sign=1;
switch (text.charAt(pos[0]))
{ case '-':
sign=-1; // fall through
case '+':
pos[0]++; }
// Look for hours:minutes or hhmm.
var st=pos[0];
var value=this.parseInt_(text,pos);
if (value==0
&& pos[0]==st)
{ return false;
}
var offset;
if (pos[0]<text.length
&& text.charAt(pos[0])==':')
{
// This is the hours:minutes case
offset=value*60;
pos[0]++;
st=pos[0];
value=this.parseInt_(text,pos);
if (value==0
&& pos[0]==st)
{ return false;
}
offset+=value;
}
else
{
// This is the hhmm case.
offset=value;
// Assume "-23".."+23" refers to hours.
if (offset<24
&& (pos[0]-st)<=2)
[[#variable20b9c5c0]]
else
[[#variable20b9c5a0]]
}
offset *= sign;
cal.tzOffset=-offset;
return true;
} ;
/**
* Parse a integer string and return integer value.
*
* @param {string} text string being parsed.
* @param {Array} pos parse position.
*
* @return {number} Converted integer value.
* @private
*/
/**
* Parse a integer string and return integer value.
*
* @param {string} text string being parsed.
* @param {Array.<number>} pos parse position.
*
* @return {number} Converted integer value.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.parseInt_= function (text,pos)
{ var m=text.substring(pos[0]).match(/^\d+/);
if (!m)
{ return -1;
}
pos[0]+=m[0].length;
return parseInt(m[0],10);
} ;
/**
* Attempt to match the text at a given position against an array of strings.
* Since multiple strings in the array may match (for example, if the array
* contains "a", "ab", and "abc", all will match the input string "abcd") the
* longest match is returned.
*
* @param {string} text The string to match to.
* @param {Array} pos parsing position.
* @param {Array} data The string array that is used to found match from.
*
* @return {number} the new start position if matching succeeded; a negative
* number indicating matching failure.
* @private
*/
/**
* Attempt to match the text at a given position against an array of strings.
* Since multiple strings in the array may match (for example, if the array
* contains "a", "ab", and "abc", all will match the input string "abcd") the
* longest match is returned.
*
* @param {string} text The string to match to.
* @param {Array.<number>} pos parsing position.
* @param {Array.<string>} data The string array of matching patterns.
*
* @return {number} the new start position if matching succeeded; a negative
* number indicating matching failure.
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.prototype.matchString_= function (text,pos,data)
{
// There may be multiple strings in the data[] array which begin with
// the same prefix (e.g., Cerven and Cervenec (June and July) in Czech).
// We keep track of the longest match, and return that. Note that this
// unfortunately requires us to test all array elements.
var bestMatchLength=0;
var bestMatch=-1;
var lower_text=text.substring(pos[0]).toLowerCase( );
for (var i=0; i<data.length; [[#variable20b9c4a0]])
{ var len=data[i].length;
// Always compare if we have no match yet; otherwise only compare
// against potentially better matches (longer strings).
if (len>bestMatchLength
&& lower_text.indexOf(data[i].toLowerCase( ))==0)
{ bestMatch=i;
bestMatchLength=len;
}
}
if (bestMatch>=0)
{ pos[0]+=bestMatchLength;
}
return bestMatch;
} ;
/**
* This class hold the intermediate parsing result. After all fields are
* consumed, final result will be resolved from this class.
* @constructor
* @private
*/
goog. [[#variable20b9c880]].DateTimeParse.MyDate_= function ( )
{} ;
|
| CloneAbstraction |
| Parameter Index | Clone Instance | Parameter Name | Value |
|---|---|---|---|
| 1 | 1 | [[#20b9c880]] | locale |
| 1 | 2 | [[#20b9c880]] | i18n |
| 2 | 1 | [[#20b9c900]] | this |
| 2 | 2 | [[#20b9c900]] | goog.i18n |
| 3 | 1 | [[#20b9c740]] | symbols_ |
| 3 | 2 | [[#20b9c740]] | DateTimeSymbols |
| 4 | 1 | [[#20b9c5c0]] | offset *= 60; |
| 4 | 2 | [[#20b9c5c0]] | { offset *= 60;
} |
| 5 | 1 | [[#20b9c5a0]] | // todo: this looks questionable, should have more error checking offset=offset%100+offset/100*60; |
| 5 | 2 | [[#20b9c5a0]] | {
// todo: this looks questionable, should have more error checking
offset=offset%100+offset/100*60;
} |
| 6 | 1 | [[#20b9c4a0]] | ++i |
| 6 | 2 | [[#20b9c4a0]] | i++ |