#!/usr/bin/gawk -f # -*- Mode: awk; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # This file is part of the LibreOffice project. # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # Usage: gawk -f sort-formats-by-formatindex.awk [-v group=1] ll_CC.xml # # Sort the LC_FORMAT child elements FormatElement and their children by # formatindex="..." value for easier comparison between locales. # If -v group=1 is given, the output is sorted by usage groups first, then by # formatindex. This could be the final sorting to commit. # Output goes to stdout. BEGIN { file = "" usage["FIXED_NUMBER"] = 1 usage["SCIENTIFIC_NUMBER"] = 2 usage["PERCENT_NUMBER"] = 3 usage["CURRENCY"] = 4 usage["DATE"] = 5 usage["TIME"] = 6 usage["DATE_TIME"] = 7 group = (group ? 1 : 0) # -v group=... given or not } file != FILENAME { file = FILENAME informats = 0 currusage = 0 currformat = 0 inFormatElement = 0 delete formats currleader = 0 delete leaders } /]/ { if (!/\/>/) informats = 1 print next } informats && /<\/LC_FORMAT>/ { PROCINFO["sorted_in"] = "@ind_num_asc" for (u in formats) { if (isarray(formats[u])) { for (f in formats[u]) { if (isarray(formats[u][f])) { for (i in formats[u][f]) print formats[u][f][i] } else { # Something unhandled, adapt code. print "XXX formats[u][f] error: " formats[u][f] } } } else { # Something unhandled, adapt code. print "XXX formats[u] error: " formats[u] } } informats = 0 } { if (!informats) { print next } } /]/ { print next } # Prefix a leading comment (or even an element) to the next FormatElement. !inFormatElement { leaders[++currleader] = $0 next } # Associate any element or comment with the current FormatElement. { formats[currusage][currformat][++child] = $0 } /<\/FormatElement>/ { inFormatElement = 0 } END { } # vim:set shiftwidth=4 softtabstop=4 expandtab: