9652a first лет %!s(int64=8): %!d(string=назад) flowRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forEach.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forEachRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forInRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forOwn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) forOwnRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) fromPairs.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) function.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) functions.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) functionsIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) get.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) getOr.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) groupBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) gt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) gte.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) has.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) hasIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) head.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) identical.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) identity.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) inRange.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) includes.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) includesFrom.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) indexBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) indexOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) indexOfFrom.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) init.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) initial.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) intersection.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) intersectionBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) intersectionWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invert.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invertBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invertObj.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invoke.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invokeArgs.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invokeArgsMap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) invokeMap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isArguments.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isArray.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isArrayBuffer.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isArrayLike.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isArrayLikeObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isBoolean.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isBuffer.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isDate.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isElement.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isEmpty.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isEqual.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isEqualWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isError.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isFinite.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isFunction.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isInteger.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isLength.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isMap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isMatch.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isMatchWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isNaN.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isNative.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isNil.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isNull.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isNumber.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isObjectLike.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isPlainObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isRegExp.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isSafeInteger.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isSet.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isString.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isSymbol.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isTypedArray.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isUndefined.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isWeakMap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) isWeakSet.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) iteratee.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) join.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) juxt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) kebabCase.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) keyBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) keys.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) keysIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lang.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) last.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lastIndexOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lastIndexOfFrom.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lowerCase.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lowerFirst.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) lte.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) map.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mapKeys.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mapValues.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) matches.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) matchesProperty.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) math.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) max.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) maxBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mean.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) meanBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) memoize.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) merge.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mergeAll.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mergeAllWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mergeWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) method.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) methodOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) min.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) minBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) mixin.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) multiply.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) nAry.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) negate.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) next.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) noop.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) now.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) nth.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) nthArg.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) number.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) object.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) omit.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) omitAll.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) omitBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) once.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) orderBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) over.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) overArgs.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) overEvery.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) overSome.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pad.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) padChars.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) padCharsEnd.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) padCharsStart.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) padEnd.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) padStart.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) parseInt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) partial.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) partialRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) partition.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) path.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pathEq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pathOr.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) paths.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pick.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pickAll.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pickBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pipe.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) placeholder.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) plant.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pluck.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) prop.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) propEq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) propOr.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) property.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) propertyOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) props.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pull.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pullAll.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pullAllBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pullAllWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) pullAt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) random.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) range.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) rangeRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) rangeStep.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) rangeStepRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) rearg.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) reduce.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) reduceRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) reject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) remove.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) repeat.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) replace.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) rest.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) restFrom.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) result.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) reverse.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) round.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sample.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sampleSize.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) seq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) set.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) setWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) shuffle.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) size.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) slice.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) snakeCase.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) some.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedIndex.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedIndexBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedIndexOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedLastIndex.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedLastIndexBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedLastIndexOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedUniq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sortedUniqBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) split.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) spread.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) spreadFrom.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) startCase.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) startsWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) string.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) stubArray.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) stubFalse.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) stubObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) stubString.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) stubTrue.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) subtract.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sum.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) sumBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) symmetricDifference.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) symmetricDifferenceBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) symmetricDifferenceWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) tail.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) take.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) takeLast.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) takeLastWhile.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) takeRight.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) takeRightWhile.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) takeWhile.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) tap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) template.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) templateSettings.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) throttle.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) thru.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) times.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toArray.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toFinite.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toInteger.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toIterator.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toJSON.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toLength.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toLower.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toNumber.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toPairs.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toPairsIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toPath.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toPlainObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toSafeInteger.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toString.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) toUpper.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) transform.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trim.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trimChars.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trimCharsEnd.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trimCharsStart.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trimEnd.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) trimStart.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) truncate.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unapply.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unary.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unescape.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) union.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unionBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unionWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) uniq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) uniqBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) uniqWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) uniqueId.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unnest.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unset.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unzip.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) unzipWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) update.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) updateWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) upperCase.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) upperFirst.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) useWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) util.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) value.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) valueOf.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) values.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) valuesIn.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) where.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) whereEq.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) without.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) words.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrap.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrapperAt.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrapperChain.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrapperLodash.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrapperReverse.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) wrapperValue.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) xor.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) xorBy.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) xorWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zip.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zipAll.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zipObj.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zipObject.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zipObjectDeep.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) zipWith.js 11e3a9652a first лет %!s(int64=8): %!d(string=назад) tamron - Gogs: Go Git Service

Nessuna descrizione

class.smarttemplateparser.php 11KB

    <?php /** * SmartTemplateParser Class * Used by SmartTemplate Class * * @desc Used by SmartTemplate Class * @author Philipp v. Criegern philipp@criegern.com * @author Manuel 'EndelWar' Dalla Lana endelwar@aregar.it * @version 1.2.1 03.07.2006 * * CVS ID: $Id: class.smarttemplateparser.php 2504 2011-12-28 07:35:29Z liu21st $ */ class SmartTemplateParser { /** * The template itself * * @access private */ var $template; /** * The template filename used to extract the dirname for subtemplates * * @access private */ var $template_dir; /** * List of used SmartTemplate Extensions * * @access private */ var $extension_tagged = array(); /** * Error messages * * @access public */ var $error; /** * SmartTemplateParser Constructor * * @param string $template_filename HTML Template Filename */ function SmartTemplateParser ( $template_filename ) { // Load Template if ($hd = @fopen($template_filename, "r")) { if (filesize($template_filename)) { $this->template = fread($hd, filesize($template_filename)); } else { $this->template = "SmartTemplate Parser Error: File size is zero byte: '$template_filename'"; } fclose($hd); // Extract the name of the template directory $this->template_dir = dirname($template_filename); } else { $this->template = "SmartTemplate Parser Error: File not found: '$template_filename'"; } } /** * Main Template Parser * * @param string $compiled_template_filename Compiled Template Filename * @desc Creates Compiled PHP Template */ function compile( $compiled_template_filename = '' ) { if (empty($this->template)) { return; } /* Quick hack to allow subtemplates */ if(eregi("<!-- INCLUDE", $this->template)) { while ($this->count_subtemplates() > 0) { preg_match_all('/<!-- INCLUDE ([a-zA-Z0-9_.]+) -->/', $this->template, $tvar); foreach($tvar[1] as $subfile) { if(file_exists($this->template_dir . "/$subfile")) { $subst = implode('',file($this->template_dir . "/$subfile")); } else { $subst = 'SmartTemplate Parser Error: Subtemplate not found: \''.$subfile.'\''; } $this->template = str_replace("<!-- INCLUDE $subfile -->", $subst, $this->template); } } } // END, ELSE Blocks $page = preg_replace("/<!-- ENDIF.+?-->/", "<?php\n}\n?>", $this->template); $page = preg_replace("/<!-- END[ a-zA-Z0-9_.]* -->/", "<?php\n}\n\$_obj=\$_stack[--\$_stack_cnt];}\n?>", $page); $page = str_replace("<!-- ELSE -->", "<?php\n} else {\n?>", $page); // 'BEGIN - END' Blocks if (preg_match_all('/<!-- BEGIN ([a-zA-Z0-9_.]+) -->/', $page, $var)) { foreach ($var[1] as $tag) { list($parent, $block) = $this->var_name($tag); $code = "<?php\n" . "if (!empty(\$$parent"."['$block'])){\n" . "if (!is_array(\$$parent"."['$block']))\n" . "\$$parent"."['$block']=array(array('$block'=>\$$parent"."['$block']));\n" . "\$_tmp_arr_keys=array_keys(\$$parent"."['$block']);\n" . "if (\$_tmp_arr_keys[0]!='0')\n" . "\$$parent"."['$block']=array(0=>\$$parent"."['$block']);\n" . "\$_stack[\$_stack_cnt++]=\$_obj;\n" . "foreach (\$$parent"."['$block'] as \$rowcnt=>\$$block) {\n" . "\$$block"."['ROWCNT']=\$rowcnt;\n" . "\$$block"."['ALTROW']=\$rowcnt%2;\n" . "\$$block"."['ROWBIT']=\$rowcnt%2;\n" . "\$_obj=&\$$block;\n?>"; $page = str_replace("<!-- BEGIN $tag -->", $code, $page); } } // 'IF nnn=mmm' Blocks if (preg_match_all('/<!-- (ELSE)?IF ([a-zA-Z0-9_.]+)[ ]*([!=<>]+)[ ]*(["]?[^"]*["]?) -->/', $page, $var)) { foreach ($var[2] as $cnt => $tag) { list($parent, $block) = $this->var_name($tag); $cmp = $var[3][$cnt]; $val = $var[4][$cnt]; $else = ($var[1][$cnt] == 'ELSE') ? '} else' : ''; if ($cmp == '=') { $cmp = '=='; } if (preg_match('/"([^"]*)"/',$val,$matches)) { $code = "<?php\n$else"."if (\$$parent"."['$block'] $cmp \"".$matches[1]."\"){\n?>"; } elseif (preg_match('/([^"]*)/',$val,$matches)) { list($parent_right, $block_right) = $this->var_name($matches[1]); $code = "<?php\n$else"."if (\$$parent"."['$block'] $cmp \$$parent_right"."['$block_right']){\n?>"; } $page = str_replace($var[0][$cnt], $code, $page); } } // 'IF nnn' Blocks if (preg_match_all('/<!-- (ELSE)?IF ([a-zA-Z0-9_.]+) -->/', $page, $var)) { foreach ($var[2] as $cnt => $tag) { $else = ($var[1][$cnt] == 'ELSE') ? '} else' : ''; list($parent, $block) = $this->var_name($tag); $code = "<?php\n$else"."if (!empty(\$$parent"."['$block'])){\n?>"; $page = str_replace($var[0][$cnt], $code, $page); } } // Replace Scalars if (preg_match_all('/{([a-zA-Z0-9_. >]+)}/', $page, $var)) { foreach ($var[1] as $fulltag) { // Determin Command (echo / $obj[n]=) list($cmd, $tag) = $this->cmd_name($fulltag); list($block, $skalar) = $this->var_name($tag); $code = "<?php\n$cmd \$$block"."['$skalar'];\n?>\n"; $page = str_replace('{'.$fulltag.'}', $code, $page); } } // ROSI Special: Replace Translations if (preg_match_all('/<"([a-zA-Z0-9_.]+)">/', $page, $var)) { foreach ($var[1] as $tag) { list($block, $skalar) = $this->var_name($tag); $code = "<?php\necho gettext('$skalar');\n?>\n"; $page = str_replace('<"'.$tag.'">', $code, $page); } } // Include Extensions $header = ''; if (preg_match_all('/{([a-zA-Z0-9_]+):([^}]*)}/', $page, $var)) { foreach ($var[2] as $cnt => $tag) { // Determin Command (echo / $obj[n]=) list($cmd, $tag) = $this->cmd_name($tag); $extension = $var[1][$cnt]; if (!isset($this->extension_tagged[$extension])) { $header .= "include_once \"smarttemplate_extensions/smarttemplate_extension_$extension.php\";\n"; $this->extension_tagged[$extension] = true; } if (!strlen($tag)) { $code = "<?php\n$cmd smarttemplate_extension_$extension();\n?>\n"; } elseif (substr($tag, 0, 1) == '"') { $code = "<?php\n$cmd smarttemplate_extension_$extension($tag);\n?>\n"; } elseif (strpos($tag, ',')) { list($tag, $addparam) = explode(',', $tag, 2); list($block, $skalar) = $this->var_name($tag); if (preg_match('/^([a-zA-Z_]+)/', $addparam, $match)) { $nexttag = $match[1]; list($nextblock, $nextskalar) = $this->var_name($nexttag); $addparam = substr($addparam, strlen($nexttag)); $code = "<?php\n$cmd smarttemplate_extension_$extension(\$$block"."['$skalar'],\$$nextblock"."['$nextskalar']"."$addparam);\n?>\n"; } else { $code = "<?php\n$cmd smarttemplate_extension_$extension(\$$block"."['$skalar'],$addparam);\n?>\n"; } } else { list($block, $skalar) = $this->var_name($tag); $code = "<?php\n$cmd smarttemplate_extension_$extension(\$$block"."['$skalar']);\n?>\n"; } $page = str_replace($var[0][$cnt], $code, $page); } } // Add Include Header if (isset($header) && !empty($header)) { $page = "<?php\n$header\n?>$page"; } // Store Code to Temp Dir if (strlen($compiled_template_filename)) { if ($hd = fopen($compiled_template_filename, "w")) { fwrite($hd, $page); fclose($hd); return true; } else { $this->error = "Could not write compiled file."; return false; } } else { return $page; } } /** * Splits Template-Style Variable Names into an Array-Name/Key-Name Components * {example} : array( "_obj", "example" ) -> $_obj['example'] * {example.value} : array( "_obj['example']", "value" ) -> $_obj['example']['value'] * {example.0.value} : array( "_obj['example'][0]", "value" ) -> $_obj['example'][0]['value'] * {top.example} : array( "_stack[0]", "example" ) -> $_stack[0]['example'] * {parent.example} : array( "_stack[$_stack_cnt-1]", "example" ) -> $_stack[$_stack_cnt-1]['example'] * {parent.parent.example} : array( "_stack[$_stack_cnt-2]", "example" ) -> $_stack[$_stack_cnt-2]['example'] * * @param string $tag Variale Name used in Template * @return array Array Name, Key Name * @access private * @desc Splits Template-Style Variable Names into an Array-Name/Key-Name Components */ function var_name($tag) { $parent_level = 0; while (substr($tag, 0, 7) == 'parent.') { $tag = substr($tag, 7); $parent_level++; } if (substr($tag, 0, 4) == 'top.') { $obj = '_stack[0]'; $tag = substr($tag,4); } elseif ($parent_level) { $obj = '_stack[$_stack_cnt-'.$parent_level.']'; } else { $obj = '_obj'; } while (is_int(strpos($tag, '.'))) { list($parent, $tag) = explode('.', $tag, 2); if (is_numeric($parent)) { $obj .= "[" . $parent . "]"; } else { $obj .= "['" . $parent . "']"; } } $ret = array($obj, $tag); return $ret; } /** * Determine Template Command from Variable Name * {variable} : array( "echo", "variable" ) -> echo $_obj['variable'] * {variable > new_name} : array( "_obj['new_name']=", "variable" ) -> $_obj['new_name']= $_obj['variable'] * * @param string $tag Variale Name used in Template * @return array Array Command, Variable * @access private * @desc Determine Template Command from Variable Name */ function cmd_name($tag) { if (preg_match('/^(.+) > ([a-zA-Z0-9_.]+)$/', $tag, $tagvar)) { $tag = $tagvar[1]; list($newblock, $newskalar) = $this->var_name($tagvar[2]); $cmd = "\$$newblock"."['$newskalar']="; } else { $cmd = "echo"; } $ret = array($cmd, $tag); return $ret; } /** * @return int Number of subtemplate included * @access private * @desc Count number of subtemplates included in current template */ function count_subtemplates() { preg_match_all('/<!-- INCLUDE ([a-zA-Z0-9_.]+) -->/', $this->template, $tvar); $count_subtemplates = count($tvar[1]); $ret = intval($count_subtemplates); return $ret; } } ?>