You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.2 KiB
154 lines
4.2 KiB
#! /usr/bin/env python
|
|
|
|
"""This file is part of the KDE project
|
|
Copyright (C) 2006 Alfredo Beaumont Sainz <alfredo.beaumont@gmail.com>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
"""
|
|
import sys
|
|
import string
|
|
import time
|
|
import os
|
|
|
|
def write_header( f ):
|
|
print('''//
|
|
// Created: ''' + time.ctime(time.time()) + '''
|
|
// by: ''' + os.path.basename( sys.argv[0] ) + '''
|
|
// from: ''' + os.path.basename( sys.argv[1] ) + '''
|
|
//
|
|
// WARNING! All changes made in this file will be lost!
|
|
|
|
/* This file is part of the KDE project
|
|
Copyright (C) 2006 Alfredo Beaumont Sainz <alfredo.beaumont@gmail.com>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
''', file=f)
|
|
|
|
def write_h( f ):
|
|
print('''
|
|
#ifndef ENTITIES_H
|
|
#define ENTITIES_H
|
|
|
|
#include "kformuladefs.h"
|
|
|
|
KFORMULA_NAMESPACE_BEGIN
|
|
|
|
struct entityMap {
|
|
static int size();
|
|
int operator<( const char* right ) const {
|
|
return qstrcmp( name, right ) < 0;
|
|
}
|
|
const char* name;
|
|
const uint unicode;
|
|
};
|
|
|
|
extern const entityMap entities[];
|
|
|
|
KFORMULA_NAMESPACE_END
|
|
|
|
#endif // ENTITIES_H
|
|
''', file=f)
|
|
|
|
def write_cc( fr, fw ):
|
|
print('''
|
|
#include "entities.h"
|
|
|
|
KFORMULA_NAMESPACE_BEGIN
|
|
|
|
const entityMap entities[] = {''', file=fw)
|
|
|
|
parse( fr, fw )
|
|
|
|
print('''
|
|
};
|
|
|
|
// Needed since sizeof is a macro and we cannot be used until size is known
|
|
int entityMap::size()
|
|
{
|
|
return sizeof( entities ) / sizeof( entityMap );
|
|
}
|
|
|
|
KFORMULA_NAMESPACE_END
|
|
''', file=fw)
|
|
|
|
def name_cmp( a, b ):
|
|
|
|
if a[0] < b[0]:
|
|
return -1
|
|
if a[0] > b[0]:
|
|
return 1
|
|
print('WARNING: Same name in entity: ' + a[0] + ', ' + b[0])
|
|
return 0;
|
|
|
|
def parse( fr, fw ):
|
|
line = fr.readline()
|
|
while line != "" and string.find( line, '<pre>' ) == -1:
|
|
line = fr.readline()
|
|
pos = string.find( line, '<pre>' ) ### Ad-hoc detection
|
|
if pos == -1:
|
|
return
|
|
line = line[pos + len('<pre>'):].strip() ### Ad-hoc detection
|
|
entries = []
|
|
while line != "" and string.find( line, ',' ) != -1:
|
|
fields = line.split(',')
|
|
name = fields[0].strip()
|
|
number = fields[1].strip()
|
|
###
|
|
# TODO: Support multicharacter entities, should also be supported by
|
|
# application. The best solution would probably to map to a single
|
|
# character provided by the font in the private area of Unicode
|
|
if string.find( number, '-' ) == -1:
|
|
entries.append( [name, '0x' + number[1:]] )
|
|
line = fr.readline().strip()
|
|
|
|
entries.sort( name_cmp, None, True )
|
|
fd_list = open( 'entity.list', 'w' )
|
|
while True:
|
|
e = entries.pop()
|
|
fd_list.write( e[0] + ' ' + e[1] + '\n')
|
|
print(' {"' + e[0] + '", ' + e[1] + '}', end=' ', file=fw)
|
|
if len( entries ) == 0:
|
|
break
|
|
print(',', file=fw)
|
|
fd_list.close()
|
|
|
|
if __name__ == '__main__':
|
|
fh = open( '../entities.h', 'w' )
|
|
write_header( fh )
|
|
write_h( fh )
|
|
fh.close()
|
|
fcc = open( '../entities.cpp', 'w' )
|
|
write_header( fcc )
|
|
fr = open( sys.argv[1] )
|
|
write_cc( fr , fcc )
|
|
fcc.close()
|
|
fr.close()
|
|
|