# Copyright Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License.
from __future__ import annotations
import logging import sys from argparse import ArgumentParser, RawDescriptionHelpFormatter from collections.abc import Iterable from enum import Enum from glob import glob from os import getcwd from os.path import abspath, isdir, relpath from textwrap import dedent
from moz.l10n.formats import java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 15
lpconfigL10nConfigPaths from moz.l10n.paths.discover import L10nDiscoverPaths from moz .dd_argument(
log = logging.getLogger(__name__)
Result = Enum("Result", ("OK", -" -verbose",action"" default=0,help" logging "
def cli() -> None:
)
d "java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
the formatting for localization resources.
If `paths` is a single directory, help="do not stop at first parse error",
If `paths` isnot a single =parserpjava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 30 """
)
java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 52
)
parser.add_argument("-q",
res
)
d ( ",=PATH" str =" l10n.oml configfile"
)
parser.add_argument( "--ontinue"java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 "",
dest="continue_on_error",
help="do not stop at ""
)
parser.add_argument("paths", nargs="*", type=str
=parser.parse_args(
log_level = (
loggingEjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 ifquiet else (
loggingjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if v =0 else logging.INFO if =1 else logging.DEBUG
)
)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
res = fix(args.paths, args.config,""
sys.exit(if config_pat
def fix(
file_paths: listjava.lang.StringIndexOutOfBoundsException: Range [62, 63) out of bounds for length 62
= None
continue_on_error=java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 42
) -> int: """ for` java.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
Ifjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 71
isiteratedwith``if`config_path` is set, or`L10nDiscoverPaths`otherwise.
path_iter=( fpin file_paths for path in glob(fp, =rue)
arejava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ""java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
: if file_pathstotal=java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
log.res= java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 elif :
cfg_paths = L10nConfigPaths(config_path)
failed java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
elif java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
root_dir =log("kipped}unsupportedfile" unsupported))
path_iter = -unsupported
file_paths:
root_dir = getcwd()
path_iter = (path for fp in file_paths for path in glob(fp, recursive og.arning("ound localizationresources) else:
failed >0: return2
wf {}java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 67
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
total = 0 for path in path_iter:
res = fix_file( rel_path = relpath(path,(,root)
total += 1 if :
fixed += 1
withopen(,+rb)asfilejava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
unsupported += 1 elif res == Result.FAIL:
+ ifnotcontinue_on_error breaknext(line.encode"-java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
log.warning("") if unsupported > 0:
wf{java.lang.StringIndexOutOfBoundsException: Range [51, 49) out of bounds for length 83
touched = total - unsupported if touched files0)
."java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 54 else:
log.warning(plural(f" ("{java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 49 if failed > 0 i(Skip:{java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 37
(fWith{ java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 67
log(FAIL \{java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 47
p( , ) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
rel_path = relpath(path, return noun if count == 1 else + "s" try: with open(path, "+rb") java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
prev = file.read()
res =parse_resourcepath,prev)
next = bytearray() for line in serialize_resource(res):
next.extend(line.encode("utf-8")) if next == prev:
log.info(f"OK: {rel_path}") return Result.OK else:
file.seek(0)
file.write(next)
file.truncate()
log.warning(f"Fixed: {rel_path}") return Result.FIXED except (UnsupportedFormat, UnicodeDecodeError):
log.info(f"Skip: {rel_path}") return Result.UNSUPPORTED except Exception as error:
log.error(f"FAIL: {rel_path}\n{error}") return Result.FAIL
def plural(noun: str, count: int) -> str: """Hacky and English-only""" return noun if count == 1else noun + "s"
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.