#!/usr/bin/env python3
#-*- coding: utf-8 -*-

# Copyright (C) 2021 The Android Open Source Project
#
# 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.

"""
Finalize resource values in <staging-public-group> tags
and convert those to <staging-public-group-final>

Usage: finalize_res.py core/res/res/values/public.xml public_finalized.xml
"""

import re, sys, codecs

def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name, '0x{0:0{1}x}'.format(id,8))
    if re.match(r'_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val

def finalize_group(raw):
    global _type_ids, _type
    _type = raw.group(1)
    id = int(raw.group(2), 16)
    _type_ids[_type] = _type_ids.get(_type, id)
    (res, count) = re.subn(r' {0,2}<public name="(.+?)" */>', finalize_item, raw.group(3))
    if count > 0:
        res = raw.group(0).replace("staging-public-group", "staging-public-group-final") + '\n' + res
    return res

def collect_ids(raw):
    global _type_ids
    for m in re.finditer(r'<public type="(.+?)" name=".+?" id="(.+?)" />', raw):
        type = m.group(1)
        id = int(m.group(2), 16)
        _type_ids[type] = max(id + 1, _type_ids.get(type, 0))

with open(sys.argv[1]) as f:
    global _type_ids, _type
    _type_ids = {}
    raw = f.read()
    collect_ids(raw)
    raw = re.sub(r'<staging-public-group type="(.+?)" first-id="(.+?)">(.+?)</staging-public-group>', finalize_group, raw, flags=re.DOTALL)
    raw = re.sub(r' *\n', '\n', raw)
    raw = re.sub(r'\n{3,}', '\n\n', raw)
    with open(sys.argv[2], "w") as f:
        f.write(raw)


a5c77b7947aa73641658c5e7af5a09fdf2b254cd
<mask token>


def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name,
        '0x{0:0{1}x}'.format(id, 8))
    if re.match('_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val


<mask token>

<mask token>


def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name,
        '0x{0:0{1}x}'.format(id, 8))
    if re.match('_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val


def finalize_group(raw):
    global _type_ids, _type
    _type = raw.group(1)
    id = int(raw.group(2), 16)
    _type_ids[_type] = _type_ids.get(_type, id)
    res, count = re.subn(' {0,2}<public name="(.+?)" */>', finalize_item,
        raw.group(3))
    if count > 0:
        res = raw.group(0).replace('staging-public-group',
            'staging-public-group-final') + '\n' + res
    return res


def collect_ids(raw):
    global _type_ids
    for m in re.finditer('<public type="(.+?)" name=".+?" id="(.+?)" />', raw):
        type = m.group(1)
        id = int(m.group(2), 16)
        _type_ids[type] = max(id + 1, _type_ids.get(type, 0))


<mask token>

<mask token>


def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name,
        '0x{0:0{1}x}'.format(id, 8))
    if re.match('_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val


def finalize_group(raw):
    global _type_ids, _type
    _type = raw.group(1)
    id = int(raw.group(2), 16)
    _type_ids[_type] = _type_ids.get(_type, id)
    res, count = re.subn(' {0,2}<public name="(.+?)" */>', finalize_item,
        raw.group(3))
    if count > 0:
        res = raw.group(0).replace('staging-public-group',
            'staging-public-group-final') + '\n' + res
    return res


def collect_ids(raw):
    global _type_ids
    for m in re.finditer('<public type="(.+?)" name=".+?" id="(.+?)" />', raw):
        type = m.group(1)
        id = int(m.group(2), 16)
        _type_ids[type] = max(id + 1, _type_ids.get(type, 0))


with open(sys.argv[1]) as f:
    global _type_ids, _type
    _type_ids = {}
    raw = f.read()
    collect_ids(raw)
    raw = re.sub(
        '<staging-public-group type="(.+?)" first-id="(.+?)">(.+?)</staging-public-group>'
        , finalize_group, raw, flags=re.DOTALL)
    raw = re.sub(' *\\n', '\n', raw)
    raw = re.sub('\\n{3,}', '\n\n', raw)
    with open(sys.argv[2], 'w') as f:
        f.write(raw)

<mask token>
import re, sys, codecs


def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name,
        '0x{0:0{1}x}'.format(id, 8))
    if re.match('_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val


def finalize_group(raw):
    global _type_ids, _type
    _type = raw.group(1)
    id = int(raw.group(2), 16)
    _type_ids[_type] = _type_ids.get(_type, id)
    res, count = re.subn(' {0,2}<public name="(.+?)" */>', finalize_item,
        raw.group(3))
    if count > 0:
        res = raw.group(0).replace('staging-public-group',
            'staging-public-group-final') + '\n' + res
    return res


def collect_ids(raw):
    global _type_ids
    for m in re.finditer('<public type="(.+?)" name=".+?" id="(.+?)" />', raw):
        type = m.group(1)
        id = int(m.group(2), 16)
        _type_ids[type] = max(id + 1, _type_ids.get(type, 0))


with open(sys.argv[1]) as f:
    global _type_ids, _type
    _type_ids = {}
    raw = f.read()
    collect_ids(raw)
    raw = re.sub(
        '<staging-public-group type="(.+?)" first-id="(.+?)">(.+?)</staging-public-group>'
        , finalize_group, raw, flags=re.DOTALL)
    raw = re.sub(' *\\n', '\n', raw)
    raw = re.sub('\\n{3,}', '\n\n', raw)
    with open(sys.argv[2], 'w') as f:
        f.write(raw)

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

# Copyright (C) 2021 The Android Open Source Project
#
# 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.

"""
Finalize resource values in <staging-public-group> tags
and convert those to <staging-public-group-final>

Usage: finalize_res.py core/res/res/values/public.xml public_finalized.xml
"""

import re, sys, codecs

def finalize_item(raw):
    global _type_ids, _type
    id = _type_ids[_type]
    _type_ids[_type] += 1
    name = raw.group(1)
    val = '<public type="%s" name="%s" id="%s" />' % (_type, name, '0x{0:0{1}x}'.format(id,8))
    if re.match(r'_*removed.+', name):
        val = '<!-- ' + val.replace('<public', '< public') + ' -->'
    return val

def finalize_group(raw):
    global _type_ids, _type
    _type = raw.group(1)
    id = int(raw.group(2), 16)
    _type_ids[_type] = _type_ids.get(_type, id)
    (res, count) = re.subn(r' {0,2}<public name="(.+?)" */>', finalize_item, raw.group(3))
    if count > 0:
        res = raw.group(0).replace("staging-public-group", "staging-public-group-final") + '\n' + res
    return res

def collect_ids(raw):
    global _type_ids
    for m in re.finditer(r'<public type="(.+?)" name=".+?" id="(.+?)" />', raw):
        type = m.group(1)
        id = int(m.group(2), 16)
        _type_ids[type] = max(id + 1, _type_ids.get(type, 0))

with open(sys.argv[1]) as f:
    global _type_ids, _type
    _type_ids = {}
    raw = f.read()
    collect_ids(raw)
    raw = re.sub(r'<staging-public-group type="(.+?)" first-id="(.+?)">(.+?)</staging-public-group>', finalize_group, raw, flags=re.DOTALL)
    raw = re.sub(r' *\n', '\n', raw)
    raw = re.sub(r'\n{3,}', '\n\n', raw)
    with open(sys.argv[2], "w") as f:
        f.write(raw)

