зеркало из https://github.com/mozilla/pjs.git
Initial checkin of relicensing tool and test files.
This commit is contained in:
Родитель
df746f50b5
Коммит
a2c55d1689
|
@ -0,0 +1,205 @@
|
|||
ReadMe for relic.py (a Mozilla relicensing tool)
|
||||
|
||||
|
||||
This script is intended to facilitate re-licensing the Mozilla source
|
||||
tree pursuant to <http://mozilla.org/MPL/>. It cannot do the full job
|
||||
automatically but handles most of the grunt work.
|
||||
|
||||
Table of Contents:
|
||||
|
||||
The Problem
|
||||
Getting Started
|
||||
Basic Usage
|
||||
What Files are Processed
|
||||
Error Handling (--force)
|
||||
Unfinished Business
|
||||
Contributors
|
||||
|
||||
|
||||
The Problem:
|
||||
|
||||
The basic problem is that Mozilla has a lot of files. The goal is to have
|
||||
all the files (with a few minor exceptions) contain a leading license
|
||||
block that is either the MPL/GPL/LGPL tri-license or the NPL/GPL/LGPL
|
||||
tri-license. Because this was never rigorously enforced a lot of cleanup
|
||||
is necessary to correct license blocks in Mozilla's files. This script
|
||||
will traverse the given directory(s)/file(s) and fixup the leading
|
||||
license block, or give an error message explaining why it cannot. (It
|
||||
also has modes to just scan for and summarize license info.)
|
||||
|
||||
|
||||
Getting Started:
|
||||
|
||||
While 'relic.py' is probably quite portable to Windows it has not been
|
||||
tested there. There may be some hidden path-delimiter bugs. It is
|
||||
probably best to just run this script on Linux.
|
||||
|
||||
To use:
|
||||
- crack the relic-<version>.tar.gz tarball in some directory
|
||||
- call './relic.py --help' to learn the basic usage
|
||||
- play with './relic.py ...' as desired.
|
||||
|
||||
|
||||
Basic Usage:
|
||||
|
||||
'relic.py' has a --help option that explains the basic usage but I'll go
|
||||
through some examples here. In our examples we will work on re-licensing
|
||||
the mozilla/js/src directory tree.
|
||||
|
||||
'relic.py' has three modes.
|
||||
(1) List license info on each file processed (the default)
|
||||
|
||||
$ ./relic.py mozilla/js/src/jsapi.h
|
||||
/js/src/jsapi.h
|
||||
... npl/gpl found
|
||||
... license block lines: 2-32
|
||||
... original code is: Mozilla Communicator client code
|
||||
... initially by: Original Code is Netscape Communications Corporation (1998)
|
||||
|
||||
(2) Gather and dump statistics on the processed files:
|
||||
|
||||
$ ./relic.py -s mozilla/js/src/jsapi.h
|
||||
Summary of Licenses in Files
|
||||
============================
|
||||
Number Percent License
|
||||
------- -------- -----------
|
||||
1 100.00% npl/gpl
|
||||
----------------------------
|
||||
1 files processed
|
||||
|
||||
Licensed files with complete tri-license block: 0
|
||||
Licensed files with no 'Initial Developer...' info: 0
|
||||
Licensed files with no 'Original Code is...' info: 0
|
||||
Licensed files with improperly indented 'Contributor(s):' line(s): 0
|
||||
|
||||
(3) Re-licensing the given files that need it (i.e. files with a complete
|
||||
and correct license block are changed).
|
||||
|
||||
$ ./relic.py -r mozilla/js/src/jsapi.h
|
||||
mozilla/js/src/jsapi.h
|
||||
... npl/gpl found, need to relicense
|
||||
... original code is: Mozilla Communicator client code
|
||||
... initially by: Original Code is Netscape Communications Corporation (1998)
|
||||
... replacing lines 2-32 with NPL/GPL/LGPL tri-license
|
||||
... backing up to 'mozilla/js/src/jsapi.h~0'
|
||||
... done relicensing 'mozilla/js/src/jsapi.h'
|
||||
|
||||
--------------------- Summary of Results ------------------------
|
||||
Files skipped b/c they are binary: 0
|
||||
Files skipped b/c they already had proper license: 0
|
||||
Files skipped b/c they had no license: 0
|
||||
Files re-licensed: 1
|
||||
-----------------------------------------------------------------
|
||||
|
||||
If you are trying this as you read this, run the following command to see
|
||||
the changes made to jsapi.h:
|
||||
|
||||
$ diff -c mozilla/js/src/jsapi.h~0 mozilla/js/src/jsapi.h
|
||||
|
||||
|
||||
What Files are Processed:
|
||||
|
||||
'relic.py' will process any files listed on the command line and will
|
||||
recursively process all files in any given directories:
|
||||
|
||||
$ ./relic.py -s mozilla/js/src
|
||||
Summary of Licenses in Files
|
||||
============================
|
||||
Number Percent License
|
||||
------- -------- -----------
|
||||
324 74.14% npl/gpl
|
||||
71 16.25% <none found>
|
||||
23 5.26% mpl/gpl/lgpl
|
||||
4 0.92% npl/gpl/lgpl
|
||||
4 0.92% mpl
|
||||
4 0.92% ibm
|
||||
3 0.69% mpl/gpl
|
||||
2 0.46% npl
|
||||
2 0.46% <unknown license>
|
||||
----------------------------
|
||||
437 files processed
|
||||
|
||||
Licensed files with complete tri-license block: 27
|
||||
Licensed files with no 'Initial Developer...' info: 1
|
||||
Licensed files with no 'Original Code is...' info: 27
|
||||
Licensed files with improperly indented 'Contributor(s):' line(s): 2
|
||||
|
||||
The following files are automatically skipped:
|
||||
- CVS control directories;
|
||||
- files listed in .cvsignore files;
|
||||
- all *.s files (there usage of comment delimiters is all over the map);
|
||||
- binary files; and
|
||||
- any files included in the following global variables in relic.py:
|
||||
_g_skip_file_basenames, _g_skip_files, _g_skip_dir_basenames,
|
||||
_g_skip_dirs, _g_skip_ext.
|
||||
|
||||
|
||||
Error Handling (--force):
|
||||
|
||||
There are some situations that relic.py cannot handle. E.g., a file with
|
||||
no license block to start with, an IBM license block, a license block
|
||||
sufficiently strange enough to baffle relic.py regular expressions. In
|
||||
normal operation, when an error is encoutered on any file processing
|
||||
stops. This can be annoying, so a --force|-f option was added to force
|
||||
relic.py to continue processing files after an error with a file is
|
||||
encountered. In all modes of operation errors are summarized at the end.
|
||||
|
||||
$ ./relic.py -s mozilla/extensions/transformiix/source/xml
|
||||
ERROR:relic:This is line is part of the 'Contributor(s):' paragraph but (1) is not indented and (2) does not look like it contains an email address: mozilla/extensions/transformiix/source/xml/XMLDOMUtils.h:20: ' * Keith Visco' (the --force option can be used to skip problematic files and continue processing rather than aborting)
|
||||
|
||||
$ ./relic.py -sf mozilla/extensions/transformiix/source/xml
|
||||
Summary of Licenses in Files
|
||||
============================
|
||||
Number Percent License
|
||||
------- -------- -----------
|
||||
24 100.00% mpl
|
||||
----------------------------
|
||||
24 files processed
|
||||
|
||||
Licensed files with complete tri-license block: 0
|
||||
Licensed files with no 'Initial Developer...' info: 16
|
||||
Licensed files with no 'Original Code is...' info: 15
|
||||
Licensed files with improperly indented 'Contributor(s):' line(s): 3
|
||||
|
||||
|
||||
=================== Summary of Errors ===========================
|
||||
Files with processing errors: 3
|
||||
=================================================================
|
||||
mozilla/extensions/transformiix/source/xml/XMLDOMUtils.cpp: This is line is part of the 'Contributor(s):' paragraph but (1) is not indented and (2) does not look like it contains an email address: mozilla/extensions/transformiix/source/xml/XMLDOMUtils.cpp:20: ' * Keith Visco '
|
||||
|
||||
mozilla/extensions/transformiix/source/xml/XMLDOMUtils.h: This is line is part of the 'Contributor(s):' paragraph but (1) is not indented and (2) does not look like it contains an email address: mozilla/extensions/transformiix/source/xml/XMLDOMUtils.h:20: ' * Keith Visco '
|
||||
|
||||
mozilla/extensions/transformiix/source/xml/parser/txXMLParser.h: This is line is part of the 'Contributor(s):' paragraph but (1) is not indented and (2) does not look like it contains an email address: mozilla/extensions/transformiix/source/xml/parser/txXMLParser.h:20: ' * Tom Kneeland'
|
||||
|
||||
=================================================================
|
||||
|
||||
|
||||
Unfinished Business:
|
||||
|
||||
The following is a list of issues that should be sorted out before this
|
||||
should be used to start making patches to the Mozilla tree:
|
||||
|
||||
- What to do for files that have no 'Initial Developer...' block?
|
||||
- What to do for files that have no 'Original Code is...' block?
|
||||
- Are there specific files or parts of the mozilla tree that should be
|
||||
skipped always, i.e. generated files, files not meant to have leading
|
||||
license blocks?
|
||||
- What to do for files with the IBM license?
|
||||
- Should *.uf be ignored (there are 87 of them in the mozilla tree)?
|
||||
- The 'ripl' and lick' scripts' "include licenses" configuration option
|
||||
is not supported in anyway by relic.py. Is it necessary? I don't see a
|
||||
useful use case.
|
||||
- test/x_thread_align_center.xml and test/abs2rel.pl are examples of
|
||||
files that are not handled correctly. In the former there is some data
|
||||
loss. In the latter the is some cruft left over.
|
||||
|
||||
|
||||
Contributors:
|
||||
|
||||
Trent Mick (TrentM@ActiveState.com) originally wrote this script,
|
||||
borrowing some from earlier attempts in the name of 'lick', 'lutils.py',
|
||||
and 'ripl' (see <http://bugzilla.mozilla.org/show_bug.cgi?id=98089>).
|
||||
If you have problems with the script please let me know and hopefully I
|
||||
can help you out.
|
||||
|
||||
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,145 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: Mozilla-sample-code 1.0
|
||||
*
|
||||
* Copyright (c) 2002 Netscape Communications Corporation and
|
||||
* other contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this Mozilla sample software and associated documentation files
|
||||
* (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
* persons to whom the Software is furnished to do so, subject to the
|
||||
* following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Adam Lock <adamlock@netscape.com>
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "BrowserToolTip.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CBrowserToolTip
|
||||
|
||||
CBrowserToolTip::CBrowserToolTip()
|
||||
{
|
||||
}
|
||||
|
||||
CBrowserToolTip::~CBrowserToolTip()
|
||||
{
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CBrowserToolTip, CWnd)
|
||||
//{{AFX_MSG_MAP(CBrowserToolTip)
|
||||
ON_WM_PAINT()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
BOOL CBrowserToolTip::Create(CWnd *pParentWnd)
|
||||
{
|
||||
return CWnd::CreateEx(WS_EX_TOOLWINDOW,
|
||||
AfxRegisterWndClass(CS_SAVEBITS, NULL, GetSysColorBrush(COLOR_INFOBK), NULL),
|
||||
_T("ToolTip"), WS_POPUP | WS_BORDER, 0, 0, 1, 1, pParentWnd->GetSafeHwnd(), NULL);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CBrowserToolTip message handlers
|
||||
|
||||
void CBrowserToolTip::OnPaint()
|
||||
{
|
||||
CPaintDC dc(this); // device context for painting
|
||||
|
||||
CRect rcClient;
|
||||
GetClientRect(&rcClient);
|
||||
|
||||
// Draw tip text
|
||||
int oldBkMode = dc.SetBkMode(TRANSPARENT);
|
||||
COLORREF oldTextColor = dc.SetTextColor(GetSysColor(COLOR_INFOTEXT));
|
||||
HGDIOBJ oldFont = dc.SelectObject(GetStockObject(DEFAULT_GUI_FONT));
|
||||
|
||||
dc.DrawText(m_szTipText, -1, rcClient, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
|
||||
|
||||
dc.SetBkMode(oldBkMode);
|
||||
dc.SetTextColor(oldTextColor);
|
||||
dc.SelectObject(oldFont);
|
||||
}
|
||||
|
||||
BOOL CBrowserToolTip::PreCreateWindow(CREATESTRUCT& cs)
|
||||
{
|
||||
return CWnd::PreCreateWindow(cs);
|
||||
}
|
||||
|
||||
void CBrowserToolTip::SetTipText(const CString &szTipText)
|
||||
{
|
||||
m_szTipText = szTipText;
|
||||
}
|
||||
|
||||
void CBrowserToolTip::Show(CWnd *pOverWnd, long left, long top)
|
||||
{
|
||||
// Calculate the client window size
|
||||
CRect rcNewClient(0,0,0,0);
|
||||
CDC *pdc = GetDC();
|
||||
HGDIOBJ oldFont = pdc->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
|
||||
rcNewClient.bottom = pdc->DrawText(m_szTipText, -1, rcNewClient,
|
||||
DT_SINGLELINE | DT_VCENTER | DT_CENTER | DT_CALCRECT);
|
||||
pdc->SelectObject(oldFont);
|
||||
ReleaseDC(pdc);
|
||||
rcNewClient.right += 8;
|
||||
rcNewClient.bottom += 8;
|
||||
|
||||
// Adjust the tooltip to new size
|
||||
AdjustWindowRectEx(rcNewClient, GetWindowLong(m_hWnd, GWL_STYLE), FALSE, GetWindowLong(m_hWnd, GWL_EXSTYLE));
|
||||
|
||||
// Adjust the left, top position of the tooltip
|
||||
CPoint ptTip(left, top);
|
||||
pOverWnd->ClientToScreen(&ptTip);
|
||||
|
||||
// Make sure tip is below cursor
|
||||
POINT ptCursor;
|
||||
GetCursorPos(&ptCursor);
|
||||
long cyCursor = GetSystemMetrics(SM_CYCURSOR);
|
||||
if (ptTip.y < ptCursor.y + cyCursor)
|
||||
ptTip.y = ptCursor.y + cyCursor;
|
||||
|
||||
// Make sure tip is fully visible
|
||||
RECT rcScreen;
|
||||
GetDesktopWindow()->GetClientRect(&rcScreen);
|
||||
if (ptTip.x < 0)
|
||||
ptTip.x = 0;
|
||||
else if (ptTip.x + rcNewClient.Width() > rcScreen.right)
|
||||
ptTip.x = rcScreen.right - rcNewClient.Width();
|
||||
if (ptTip.y < 0)
|
||||
ptTip.y = 0;
|
||||
else if (ptTip.y + rcNewClient.Height() > rcScreen.bottom)
|
||||
ptTip.y = rcScreen.bottom - rcNewClient.Height();
|
||||
|
||||
// Position and show the tip
|
||||
SetWindowPos(&CWnd::wndTop, ptTip.x, ptTip.y, rcNewClient.Width(), rcNewClient.Height(),
|
||||
SWP_NOACTIVATE | SWP_SHOWWINDOW);
|
||||
}
|
||||
|
||||
void CBrowserToolTip::Hide()
|
||||
{
|
||||
ShowWindow(SW_HIDE);
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(VMS)
|
||||
#include <sys/timeb.h>
|
||||
#elif defined(XP_UNIX) || defined(XP_OS2_EMX) || defined(XP_BEOS)
|
||||
#include <sys/time.h>
|
||||
#elif defined(WIN32)
|
||||
#include <windows.h>
|
||||
#elif defined(XP_OS2_VACPP)
|
||||
#include <sys/timeb.h>
|
||||
#else
|
||||
#error "Architecture not supported"
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#if defined(OMIT_LIB_BUILD_TIME)
|
||||
/*
|
||||
* Some platforms don't have any 64-bit integer type
|
||||
* such as 'long long'. Because we can't use NSPR's
|
||||
* PR_snprintf in this program, it is difficult to
|
||||
* print a static initializer for PRInt64 (a struct).
|
||||
* So we print nothing. The makefiles that build the
|
||||
* shared libraries will detect the empty output string
|
||||
* of this program and omit the library build time
|
||||
* in PRVersionDescription.
|
||||
*/
|
||||
#elif defined(VMS)
|
||||
long long now;
|
||||
struct timeb b;
|
||||
ftime(&b);
|
||||
now = b.time;
|
||||
now *= 1000000;
|
||||
now += (1000 * b.millitm);
|
||||
fprintf(stdout, "%Ld", now);
|
||||
#elif defined(XP_UNIX) || defined(XP_OS2_EMX) || defined(XP_BEOS)
|
||||
long long now;
|
||||
struct timeval tv;
|
||||
#ifdef HAVE_SVID_GETTOD
|
||||
gettimeofday(&tv);
|
||||
#else
|
||||
gettimeofday(&tv, NULL);
|
||||
#endif
|
||||
now = ((1000000LL) * tv.tv_sec) + (long long)tv.tv_usec;
|
||||
#if defined(OSF1)
|
||||
fprintf(stdout, "%ld", now);
|
||||
#elif defined(BEOS) && defined(__POWERPC__)
|
||||
fprintf(stdout, "%Ld", now); /* Metroworks on BeOS PPC */
|
||||
#else
|
||||
fprintf(stdout, "%lld", now);
|
||||
#endif
|
||||
|
||||
#elif defined(WIN32)
|
||||
__int64 now;
|
||||
FILETIME ft;
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
CopyMemory(&now, &ft, sizeof(now));
|
||||
/*
|
||||
* 116444736000000000 is the number of 100-nanosecond intervals
|
||||
* between Jan. 1, 1601 and Jan. 1, 1970.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
now = (now - 116444736000000000LL) / 10LL;
|
||||
fprintf(stdout, "%lld", now);
|
||||
#else
|
||||
now = (now - 116444736000000000i64) / 10i64;
|
||||
fprintf(stdout, "%I64d", now);
|
||||
#endif
|
||||
|
||||
#elif defined(XP_OS2_VACPP)
|
||||
/* no long long or i64 so we use a string */
|
||||
#include <string.h>
|
||||
char buf[24];
|
||||
char tbuf[7];
|
||||
time_t now;
|
||||
long mtime;
|
||||
int i;
|
||||
|
||||
struct timeb b;
|
||||
ftime(&b);
|
||||
now = b.time;
|
||||
_ltoa(now, buf, 10);
|
||||
|
||||
mtime = b.millitm * 1000;
|
||||
if (mtime == 0){
|
||||
++now;
|
||||
strcat(buf, "000000");
|
||||
} else {
|
||||
_ltoa(mtime, tbuf, 10);
|
||||
for (i = strlen(tbuf); i < 6; ++i)
|
||||
strcat(buf, "0");
|
||||
strcat(buf, tbuf);
|
||||
}
|
||||
fprintf(stdout, "%s", buf);
|
||||
|
||||
#else
|
||||
#error "Architecture not supported"
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
} /* main */
|
||||
|
||||
/* now.c */
|
|
@ -0,0 +1,33 @@
|
|||
#!env perl
|
||||
# -*- Mode: Perl; tab-width: 4; -*-
|
||||
# Blah blah blah
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
#!env perl
|
||||
# Blah blah blah
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<panels xmlns="http://www.silverstone.net.nz/2001/manticore/uidl">
|
||||
<panel label="Web Browser">
|
||||
<panel label="Browser Display" id="browser-display"/>
|
||||
</panel>
|
||||
</panels>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0"?>
|
||||
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
|
||||
|
||||
<!-- list all the packages being supplied by this jar -->
|
||||
<RDF:Seq about="urn:mozilla:skin:root">
|
||||
<RDF:li resource="urn:mozilla:skin:modern/1.0" />
|
||||
</RDF:Seq>
|
||||
|
||||
<!-- skin information -->
|
||||
<RDF:Description about="urn:mozilla:skin:modern/1.0"
|
||||
chrome:displayName="Modern"
|
||||
chrome:author="mozilla.org"
|
||||
chrome:name="modern/1.0">
|
||||
<chrome:packages>
|
||||
<RDF:Seq about="urn:mozilla:skin:modern/1.0:packages">
|
||||
<RDF:li resource="urn:mozilla:skin:modern/1.0:cview"/>
|
||||
</RDF:Seq>
|
||||
</chrome:packages>
|
||||
</RDF:Description>
|
||||
</RDF:RDF>
|
|
@ -0,0 +1,143 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org Code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(VMS)
|
||||
#include <sys/timeb.h>
|
||||
#elif defined(XP_UNIX) || defined(XP_OS2_EMX) || defined(XP_BEOS)
|
||||
#include <sys/time.h>
|
||||
#elif defined(WIN32)
|
||||
#include <windows.h>
|
||||
#elif defined(XP_OS2_VACPP)
|
||||
#include <sys/timeb.h>
|
||||
#else
|
||||
#error "Architecture not supported"
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#if defined(OMIT_LIB_BUILD_TIME)
|
||||
/*
|
||||
* Some platforms don't have any 64-bit integer type
|
||||
* such as 'long long'. Because we can't use NSPR's
|
||||
* PR_snprintf in this program, it is difficult to
|
||||
* print a static initializer for PRInt64 (a struct).
|
||||
* So we print nothing. The makefiles that build the
|
||||
* shared libraries will detect the empty output string
|
||||
* of this program and omit the library build time
|
||||
* in PRVersionDescription.
|
||||
*/
|
||||
#elif defined(VMS)
|
||||
long long now;
|
||||
struct timeb b;
|
||||
ftime(&b);
|
||||
now = b.time;
|
||||
now *= 1000000;
|
||||
now += (1000 * b.millitm);
|
||||
fprintf(stdout, "%Ld", now);
|
||||
#elif defined(XP_UNIX) || defined(XP_OS2_EMX) || defined(XP_BEOS)
|
||||
long long now;
|
||||
struct timeval tv;
|
||||
#ifdef HAVE_SVID_GETTOD
|
||||
gettimeofday(&tv);
|
||||
#else
|
||||
gettimeofday(&tv, NULL);
|
||||
#endif
|
||||
now = ((1000000LL) * tv.tv_sec) + (long long)tv.tv_usec;
|
||||
#if defined(OSF1)
|
||||
fprintf(stdout, "%ld", now);
|
||||
#elif defined(BEOS) && defined(__POWERPC__)
|
||||
fprintf(stdout, "%Ld", now); /* Metroworks on BeOS PPC */
|
||||
#else
|
||||
fprintf(stdout, "%lld", now);
|
||||
#endif
|
||||
|
||||
#elif defined(WIN32)
|
||||
__int64 now;
|
||||
FILETIME ft;
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
CopyMemory(&now, &ft, sizeof(now));
|
||||
/*
|
||||
* 116444736000000000 is the number of 100-nanosecond intervals
|
||||
* between Jan. 1, 1601 and Jan. 1, 1970.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
now = (now - 116444736000000000LL) / 10LL;
|
||||
fprintf(stdout, "%lld", now);
|
||||
#else
|
||||
now = (now - 116444736000000000i64) / 10i64;
|
||||
fprintf(stdout, "%I64d", now);
|
||||
#endif
|
||||
|
||||
#elif defined(XP_OS2_VACPP)
|
||||
/* no long long or i64 so we use a string */
|
||||
#include <string.h>
|
||||
char buf[24];
|
||||
char tbuf[7];
|
||||
time_t now;
|
||||
long mtime;
|
||||
int i;
|
||||
|
||||
struct timeb b;
|
||||
ftime(&b);
|
||||
now = b.time;
|
||||
_ltoa(now, buf, 10);
|
||||
|
||||
mtime = b.millitm * 1000;
|
||||
if (mtime == 0){
|
||||
++now;
|
||||
strcat(buf, "000000");
|
||||
} else {
|
||||
_ltoa(mtime, tbuf, 10);
|
||||
for (i = strlen(tbuf); i < 6; ++i)
|
||||
strcat(buf, "0");
|
||||
strcat(buf, tbuf);
|
||||
}
|
||||
fprintf(stdout, "%s", buf);
|
||||
|
||||
#else
|
||||
#error "Architecture not supported"
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
} /* main */
|
||||
|
||||
/* now.c */
|
|
@ -0,0 +1,69 @@
|
|||
#!env perl
|
||||
# -*- Mode: Perl; tab-width: 4; -*-
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (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.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is mozilla.org Code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 2001
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
# Blah blah blah
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
#!env perl
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (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.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is mozilla.org Code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 2001
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
# Blah blah blah
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (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.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is mozilla.org Code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 2001
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
- or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
|
||||
<panels xmlns="http://www.silverstone.net.nz/2001/manticore/uidl">
|
||||
<panel label="Web Browser">
|
||||
<panel label="Browser Display" id="browser-display"/>
|
||||
</panel>
|
||||
</panels>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (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.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is mozilla.org Code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corporation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 2001
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
- or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
|
||||
|
||||
<!-- list all the packages being supplied by this jar -->
|
||||
<RDF:Seq about="urn:mozilla:skin:root">
|
||||
<RDF:li resource="urn:mozilla:skin:modern/1.0" />
|
||||
</RDF:Seq>
|
||||
|
||||
<!-- skin information -->
|
||||
<RDF:Description about="urn:mozilla:skin:modern/1.0"
|
||||
chrome:displayName="Modern"
|
||||
chrome:author="mozilla.org"
|
||||
chrome:name="modern/1.0">
|
||||
<chrome:packages>
|
||||
<RDF:Seq about="urn:mozilla:skin:modern/1.0:packages">
|
||||
<RDF:li resource="urn:mozilla:skin:modern/1.0:cview"/>
|
||||
</RDF:Seq>
|
||||
</chrome:packages>
|
||||
</RDF:Description>
|
||||
</RDF:RDF>
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is TransforMiiX XSLT processor.
|
||||
*
|
||||
* The Initial Developer of the Original Code is The MITRE Corporation.
|
||||
* Portions created by MITRE are Copyright (C) 1999 The MITRE Corporation.
|
||||
*
|
||||
* Portions created by Keith Visco as a Non MITRE employee,
|
||||
* (C) 1999 Keith Visco. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Keith Visco
|
||||
* -- original author.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "XMLDOMUtils.h"
|
||||
#include "dom.h"
|
||||
#include "nsString.h"
|
||||
|
||||
void XMLDOMUtils::getNodeValue(Node* aNode, nsAString& aResult)
|
||||
{
|
||||
if (!aNode)
|
||||
return;
|
||||
|
||||
unsigned short nodeType = aNode->getNodeType();
|
||||
|
||||
switch (nodeType) {
|
||||
case Node::ATTRIBUTE_NODE:
|
||||
case Node::CDATA_SECTION_NODE:
|
||||
case Node::COMMENT_NODE:
|
||||
case Node::PROCESSING_INSTRUCTION_NODE:
|
||||
case Node::TEXT_NODE:
|
||||
{
|
||||
nsAutoString nodeValue;
|
||||
aNode->getNodeValue(nodeValue);
|
||||
aResult.Append(nodeValue);
|
||||
break;
|
||||
}
|
||||
case Node::DOCUMENT_NODE:
|
||||
{
|
||||
getNodeValue(((Document*)aNode)->getDocumentElement(),
|
||||
aResult);
|
||||
break;
|
||||
}
|
||||
case Node::DOCUMENT_FRAGMENT_NODE:
|
||||
case Node::ELEMENT_NODE:
|
||||
{
|
||||
Node* tmpNode = aNode->getFirstChild();
|
||||
while (tmpNode) {
|
||||
nodeType = tmpNode->getNodeType();
|
||||
if ((nodeType == Node::TEXT_NODE) ||
|
||||
(nodeType == Node::CDATA_SECTION_NODE)) {
|
||||
nsAutoString nodeValue;
|
||||
tmpNode->getNodeValue(nodeValue);
|
||||
aResult.Append(nodeValue);
|
||||
}
|
||||
else if (nodeType == Node::ELEMENT_NODE) {
|
||||
getNodeValue(tmpNode, aResult);
|
||||
}
|
||||
tmpNode = tmpNode->getNextSibling();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code, released
|
||||
* March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU Public License (the "GPL"), in which case the
|
||||
* provisions of the GPL are applicable instead of those above.
|
||||
* If you wish to allow use of your version of this file only
|
||||
* under the terms of the GPL and not to allow others to use your
|
||||
* version of this file under the NPL, indicate your decision by
|
||||
* deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this
|
||||
* file under either the NPL or the GPL.
|
||||
*
|
||||
* This Original Code has been modified by IBM Corporation.
|
||||
* Modifications made by IBM described herein are
|
||||
* Copyright (c) International Business Machines
|
||||
* Corporation, 2000
|
||||
*
|
||||
* Modifications to Mozilla code or documentation
|
||||
* identified per MPL Section 3.3
|
||||
*
|
||||
* Date Modified by Description of modification
|
||||
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of the Java-vendor-neutral implementation of LiveConnect
|
||||
*
|
||||
* It contains the native code implementation of JS's JavaObject class.
|
||||
*
|
||||
* An instance of JavaObject is the JavaScript reflection of a Java object.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* snip ... */
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
- The contents of this file are subject to the Mozilla Public
|
||||
- License Version 1.1 (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.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS
|
||||
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
- implied. See the License for the specific language governing
|
||||
- rights and limitations under the License.
|
||||
-
|
||||
- The Original Code is mozilla.org code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is Netscape
|
||||
- Communications Corp. Portions created by Netscape are
|
||||
- Copyright (C) 2001 Netscape Communications Corp. All
|
||||
- Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
- Bob Lord <lord@netscape.com>
|
||||
- Ian McGreer <mcgreer@netscape.com>
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
|
||||
<!DOCTYPE overlay SYSTEM "chrome://pippki/locale/certManager.dtd">
|
||||
|
||||
<overlay id="CAOverlay"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cert="http://netscape.com/rdf-cert#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<vbox id="CACerts">
|
||||
<description>&certmgr.cas;</description>
|
||||
<separator class="thin"/>
|
||||
<tree id="ca-tree" flex="1" enableColumnDrag="true"
|
||||
onselect="ca_enableButtons()">
|
||||
<treecols>
|
||||
<treecol id="certcol" label="&certmgr.certname;" primary="true"
|
||||
persist="hidden width ordinal" flex="1"/>
|
||||
<splitter class="tree-splitter"/>
|
||||
<treecol id="tokencol" label="&certmgr.tokenname;"
|
||||
persist="hidden width ordinal" flex="1"/>
|
||||
<!-- <treecol id="certdbkeycol" collapsed="true" flex="1"/> -->
|
||||
</treecols>
|
||||
<treechildren ondblclick="viewCerts();"/>
|
||||
</tree>
|
||||
<hbox>
|
||||
<button id="ca_viewButton"
|
||||
label="&certmgr.view.label;"
|
||||
disabled="true" oncommand="viewCerts();"/>
|
||||
<button id="ca_editButton"
|
||||
label="&certmgr.edit.label;"
|
||||
disabled="true" oncommand="editCerts();"/>
|
||||
<button id="ca_addButton"
|
||||
label="&certmgr.restore.label;"
|
||||
oncommand="addCACerts();"/>
|
||||
<button id="ca_deleteButton"
|
||||
label="&certmgr.delete.label;"
|
||||
disabled="true" oncommand="deleteCerts();"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</overlay>
|
|
@ -0,0 +1,413 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Original Author: Daniel Glazman <glazman@netscape.com>
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsHTMLCSSUtils_h__
|
||||
#define nsHTMLCSSUtils_h__
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMViewCSS.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIHTMLEditor.h"
|
||||
#include "ChangeCSSInlineStyleTxn.h"
|
||||
#include "nsEditProperty.h"
|
||||
#include "nsIDOMCSSStyleDeclaration.h"
|
||||
|
||||
#define SPECIFIED_STYLE_TYPE 1
|
||||
#define COMPUTED_STYLE_TYPE 2
|
||||
|
||||
class nsHTMLEditor;
|
||||
|
||||
typedef void (*nsProcessValueFunc)(const nsAString * aInputString, nsAString & aOutputString,
|
||||
const char * aDefaultValueString,
|
||||
const char * aPrependString, const char* aAppendString);
|
||||
|
||||
class nsHTMLCSSUtils
|
||||
{
|
||||
public:
|
||||
nsHTMLCSSUtils();
|
||||
~nsHTMLCSSUtils();
|
||||
|
||||
enum nsCSSEditableProperty {
|
||||
eCSSEditableProperty_NONE=0,
|
||||
eCSSEditableProperty_background_color,
|
||||
eCSSEditableProperty_background_image,
|
||||
eCSSEditableProperty_border,
|
||||
eCSSEditableProperty_caption_side,
|
||||
eCSSEditableProperty_color,
|
||||
eCSSEditableProperty_float,
|
||||
eCSSEditableProperty_font_family,
|
||||
eCSSEditableProperty_font_size,
|
||||
eCSSEditableProperty_font_style,
|
||||
eCSSEditableProperty_font_weight,
|
||||
eCSSEditableProperty_height,
|
||||
eCSSEditableProperty_list_style_type,
|
||||
eCSSEditableProperty_margin_left,
|
||||
eCSSEditableProperty_margin_right,
|
||||
eCSSEditableProperty_text_align,
|
||||
eCSSEditableProperty_text_decoration,
|
||||
eCSSEditableProperty_vertical_align,
|
||||
eCSSEditableProperty_whitespace,
|
||||
eCSSEditableProperty_width
|
||||
};
|
||||
|
||||
|
||||
struct CSSEquivTable {
|
||||
nsCSSEditableProperty cssProperty;
|
||||
nsProcessValueFunc processValueFunctor;
|
||||
const char * defaultValue;
|
||||
const char * prependValue;
|
||||
const char * appendValue;
|
||||
PRBool gettable;
|
||||
PRBool caseSensitiveValue;
|
||||
};
|
||||
|
||||
public:
|
||||
nsresult Init(nsHTMLEditor * aEditor);
|
||||
|
||||
/** answers true if the given combination element_name/attribute_name
|
||||
* has a CSS equivalence in this implementation
|
||||
*
|
||||
* @return a boolean saying if the tag/attribute has a css equiv
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing a HTML tag name
|
||||
* @param aAttribute [IN] a string containing the name of a HTML attribute carried by the element above
|
||||
*/
|
||||
PRBool IsCSSEditableProperty(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** adds/remove a CSS declaration to the STYLE atrribute carried by a given element
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] an atom containing the CSS property to set
|
||||
* @param aValue [IN] a string containing the value of the CSS property
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aPropertyValue, PRBool aSuppressTransaction);
|
||||
|
||||
/** directly adds/remove a CSS declaration to the STYLE atrribute carried by
|
||||
* a given element without going through the txn manager
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a string containing the CSS property to set/remove
|
||||
* @param aValue [IN] a string containing the new value of the CSS property
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty,
|
||||
const nsAString & aValue);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty);
|
||||
|
||||
/** gets the specified/computed style value of a CSS property for a given node (or its element
|
||||
* ancestor if it is not an element)
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing the CSS property to get
|
||||
* @param aPropertyValue [OUT] the retrieved value of the property
|
||||
*/
|
||||
nsresult GetSpecifiedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
nsresult GetComputedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
|
||||
/** Removes a CSS property from the specified declarations in STYLE attribute
|
||||
** and removes the node if it is an useless span
|
||||
*
|
||||
* @param aNode [IN] the specific node we want to remove a style from
|
||||
* @param aProperty [IN] the CSS property atom to remove
|
||||
* @param aPropertyValue [IN] the value of the property we have to rremove if the property
|
||||
* accepts more than one value
|
||||
*/
|
||||
nsresult RemoveCSSInlineStyle(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString & aPropertyValue);
|
||||
|
||||
/** Answers true is the property can be removed by setting a "none" CSS value
|
||||
* on a node
|
||||
*
|
||||
* @return a boolean saying if the property can be remove by setting a "none" value
|
||||
* @param aProperty [IN] an atom containing a CSS property
|
||||
* @param aAttribute [IN] pointer to an attribute name or null if this information is irrelevant
|
||||
*/
|
||||
PRBool IsCSSInvertable(nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** Get the default browser background color if we need it for GetCSSBackgroundColorState
|
||||
*
|
||||
* @param aColor [OUT] the default color as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultBackgroundColor(nsAString & aColor);
|
||||
|
||||
/** Get the default length unit used for CSS Indent/Outdent
|
||||
*
|
||||
* @param aLengthUnit [OUT] the default length unit as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultLengthUnit(nsAString & aLengthUnit);
|
||||
|
||||
/** asnwers true if the element aElement carries an ID or a class
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aReturn [OUT] the boolean answer
|
||||
*/
|
||||
nsresult HasClassOrID(nsIDOMElement * aElement, PRBool & aReturn);
|
||||
|
||||
/** returns the list of values for the CSS equivalences to
|
||||
* the passed HTML style for the passed node
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValueString [OUT] the list of css values
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Does the node aNode (or his parent if it is not an element node) carries
|
||||
* the CSS equivalent styles to the HTML style for this node ?
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aIsSet [OUT] a boolean being true if the css properties are set
|
||||
* @param aValueString [IN/OUT] the attribute value (in) the list of css values (out)
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
PRBool & aIsSet,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Adds to the node the CSS inline styles equivalent to the HTML style
|
||||
* and return the number of CSS properties set by the call
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aCount [OUT] the number of CSS properties set by the call
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
const nsAString * aValue,
|
||||
PRInt32 * aCount,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** removes from the node the CSS inline styles equivalent to the HTML style
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult RemoveCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom *aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** parses a "xxxx.xxxxxuuu" string where x is a digit and u an alpha char
|
||||
* we need such a parser because nsIDOMCSSStyleDeclaration::GetPropertyCSSValue() is not
|
||||
* implemented
|
||||
*
|
||||
* @param aString [IN] input string to parse
|
||||
* @param aValue [OUT] numeric part
|
||||
* @param aUnit [OUT] unit part
|
||||
*/
|
||||
void ParseLength(const nsAString & aString, float * aValue, nsIAtom ** aUnit);
|
||||
|
||||
/** sets the mIsCSSPrefChecked private member ; used as callback from observer when
|
||||
* the css pref state is changed
|
||||
*
|
||||
* @param aIsCSSPrefChecked [IN] the new boolean state for the pref
|
||||
*/
|
||||
nsresult SetCSSEnabled(PRBool aIsCSSPrefChecked);
|
||||
|
||||
/** retrieves the mIsCSSPrefChecked private member, true if the css pref is checked,
|
||||
* false if it is not
|
||||
*
|
||||
* @return the boolean value of the css pref
|
||||
*/
|
||||
PRBool IsCSSPrefChecked();
|
||||
|
||||
/** ElementsSameStyle compares two elements and checks if they have the same
|
||||
* specified CSS declarations in the STYLE attribute
|
||||
* The answer is always false if at least one of them carries an ID or a class
|
||||
*
|
||||
* @return true if the two elements are considered to have same styles
|
||||
* @param aFirstNode [IN] a DOM node
|
||||
* @param aSecondNode [IN] a DOM node
|
||||
*/
|
||||
PRBool ElementsSameStyle(nsIDOMNode *aFirstNode, nsIDOMNode *aSecondNode);
|
||||
|
||||
/** get the specified inline styles (style attribute) for an element
|
||||
*
|
||||
* @param aElement [IN] the element node
|
||||
* @param aCssDecl [OUT] the CSS declaration corresponding to the style attr
|
||||
* @param aLength [OUT] the number of declarations in aCssDecl
|
||||
*/
|
||||
nsresult GetInlineStyles(nsIDOMElement * aElement, nsIDOMCSSStyleDeclaration ** aCssDecl,
|
||||
PRUint32 * aLength);
|
||||
|
||||
/** returns aNode itself if it is an element node, or the first ancestors being an element
|
||||
* node if aNode is not one itself
|
||||
*
|
||||
* @param aNode [IN] a node
|
||||
* @param aElement [OUT] the deepest element node containing aNode (possibly aNode itself)
|
||||
*/
|
||||
nsresult GetElementContainerOrSelf(nsIDOMNode * aNode, nsIDOMElement ** aElement);
|
||||
|
||||
/** Gets the default DOMView for a given node
|
||||
*
|
||||
* @param aNode the node we want the default DOMView for
|
||||
* @param aViewCSS [OUT] the default DOMViewCSS
|
||||
*/
|
||||
nsresult GetDefaultViewCSS(nsIDOMNode * aNode, nsIDOMViewCSS ** aViewCSS);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/** retrieves the css property atom from an enum
|
||||
*
|
||||
* @param aProperty [IN] the enum value for the property
|
||||
* @param aAtom [OUT] the corresponding atom
|
||||
*/
|
||||
void GetCSSPropertyAtom(nsCSSEditableProperty aProperty, nsIAtom ** aAtom);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to a HTML style value for
|
||||
* a given equivalence table
|
||||
*
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aEquivTable [IN] the equivalence table
|
||||
* @param aValue [IN] the HTML style value
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
|
||||
void BuildCSSDeclarations(nsVoidArray & aPropertyArray,
|
||||
nsStringArray & cssValueArray,
|
||||
const CSSEquivTable * aEquivTable,
|
||||
const nsAString * aValue,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to the given HTML property/attribute/value
|
||||
* for a given node
|
||||
*
|
||||
* @param aNode [IN] the DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
void GenerateCSSDeclarationsFromHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
nsVoidArray & aPropertyArray,
|
||||
nsStringArray & aValueArray,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** creates a Transaction for setting or removing a css property
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [IN] the value to remove for this CSS property or the empty string if irrelevant
|
||||
* @param aTxn [OUT] the created transaction
|
||||
* @param aRemoveProperty [IN] true if we create a "remove" transaction, false for a "set"
|
||||
*/
|
||||
nsresult CreateCSSPropertyTxn(nsIDOMElement * aElement,
|
||||
nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
ChangeCSSInlineStyleTxn ** aTxn,
|
||||
PRBool aRemoveProperty);
|
||||
|
||||
/** back-end for GetSpecifiedProperty and GetComputedProperty
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [OUT] the retrieved value for this property
|
||||
* @param aViewCSS [IN] the ViewCSS we need in case we query computed styles
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSInlinePropertyBase(nsIDOMNode * aNode, nsIAtom * aProperty,
|
||||
nsAString & aValue,
|
||||
nsIDOMViewCSS * aViewCSS,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
|
||||
private:
|
||||
nsHTMLEditor *mHTMLEditor;
|
||||
PRBool mIsCSSPrefChecked;
|
||||
|
||||
};
|
||||
|
||||
nsresult NS_NewHTMLCSSUtils(nsHTMLCSSUtils** aInstancePtrResult);
|
||||
|
||||
#define NS_EDITOR_INDENT_INCREMENT_IN 0.4134f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_CM 1.05f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_MM 10.5f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PT 29.76f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PC 2.48f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EM 3
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EX 6
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PX 40
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PERCENT 4
|
||||
|
||||
#endif /* nsHTMLCSSUtils_h__ */
|
|
@ -0,0 +1,118 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<head>
|
||||
|
||||
<meta name="generator"
|
||||
|
||||
content="HTML Tidy for Mac OS, see www.w3.org" />
|
||||
|
||||
<title>thead_align_center.xml</title>
|
||||
|
||||
<!-- Modified: Changed doctype to xhtml 1.0 transitional Author: Chris Petersen Date: 2/01/01 -->
|
||||
|
||||
<!--
|
||||
|
||||
- The contents of this file are subject to the Mozilla Public
|
||||
|
||||
- License Version 1.1 (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.mozilla.org/MPL/
|
||||
|
||||
-
|
||||
|
||||
- Software distributed under the License is distributed on an "AS
|
||||
|
||||
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
|
||||
- implied. See the License for the specific language governing
|
||||
|
||||
- rights and limitations under the License.
|
||||
|
||||
-
|
||||
|
||||
- The Original Code is Mozilla Communicator Test Cases.
|
||||
|
||||
-
|
||||
|
||||
- The Initial Developer of the Original Code is Netscape Communications
|
||||
|
||||
- Corp. Portions created by Netscape Communications Corp. are
|
||||
|
||||
- Copyright (C) 1999 Netscape Communications Corp. All
|
||||
|
||||
- Rights Reserved.
|
||||
|
||||
-
|
||||
|
||||
- Contributor(s):Christine Dreckman Date: 1/13/99
|
||||
|
||||
|
||||
|
||||
Chris Petersen Date: 5/18/99
|
||||
|
||||
|
||||
|
||||
Christine Dreckman Date: 9/7/2000
|
||||
|
||||
|
||||
|
||||
-->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<p>In this test, the THEAD text should be center aligned</p>
|
||||
|
||||
|
||||
|
||||
<table border="1">
|
||||
|
||||
<thead align="center">
|
||||
|
||||
<tr>
|
||||
|
||||
<td>THEAD</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
|
||||
|
||||
|
||||
<tfoot>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>This text is in the TFOOT</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tfoot>
|
||||
|
||||
|
||||
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>This text is in the TBODY</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
fallback_initial_copyright_date=2001
|
|
@ -0,0 +1,65 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License
|
||||
* Version 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Initial Developers of this code under the MPL are Owen Taylor
|
||||
* <otaylor@redhat.com> and Christopher Blizzard <blizzard@redhat.com>.
|
||||
* Portions created by the Initial Developers are Copyright (C) 1999
|
||||
* Owen Taylor and Christopher Blizzard. All Rights Reserved. */
|
||||
|
||||
#ifndef __GTK_MOZAREA_H__
|
||||
#define __GTK_MOZAREA_H__
|
||||
|
||||
#include <gtk/gtkwindow.h>
|
||||
#include "gdksuperwin.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct _GtkMozArea GtkMozArea;
|
||||
typedef struct _GtkMozAreaClass GtkMozAreaClass;
|
||||
|
||||
#define GTK_TYPE_MOZAREA (gtk_mozarea_get_type ())
|
||||
#define GTK_MOZAREA(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_MOZAREA, GtkMozArea))
|
||||
#define GTK_MOZAREA_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_MOZAREA, GtkMozAreaClass))
|
||||
#define GTK_IS_MOZAREA(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_MOZAREA))
|
||||
#define GTK_IS_MOZAREA_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MOZAREA))
|
||||
|
||||
struct _GtkMozArea
|
||||
{
|
||||
GtkWidget widget;
|
||||
GdkSuperWin *superwin;
|
||||
gboolean toplevel_focus;
|
||||
|
||||
/* store away the toplevel window */
|
||||
GdkWindow *toplevel_window;
|
||||
};
|
||||
|
||||
struct _GtkMozAreaClass
|
||||
{
|
||||
GtkWindowClass window_class;
|
||||
|
||||
/* signals */
|
||||
void (* toplevel_focus_in ) (GtkMozArea *area);
|
||||
void (* toplevel_focus_out) (GtkMozArea *area);
|
||||
void (* toplevel_configure) (GtkMozArea *area);
|
||||
};
|
||||
|
||||
GtkType gtk_mozarea_get_type (void);
|
||||
GtkWidget *gtk_mozarea_new ();
|
||||
gboolean gtk_mozarea_get_toplevel_focus(GtkMozArea *area);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __GTK_MOZAREA_H__ */
|
|
@ -0,0 +1 @@
|
|||
fallback_original_code_is=mozilla.org code
|
|
@ -0,0 +1,398 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Daniel Glazman <glazman@netscape.com>, foo@bar.org
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsHTMLCSSUtils_h__
|
||||
#define nsHTMLCSSUtils_h__
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMViewCSS.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIHTMLEditor.h"
|
||||
#include "ChangeCSSInlineStyleTxn.h"
|
||||
#include "nsEditProperty.h"
|
||||
#include "nsIDOMCSSStyleDeclaration.h"
|
||||
|
||||
#define SPECIFIED_STYLE_TYPE 1
|
||||
#define COMPUTED_STYLE_TYPE 2
|
||||
|
||||
class nsHTMLEditor;
|
||||
|
||||
typedef void (*nsProcessValueFunc)(const nsAString * aInputString, nsAString & aOutputString,
|
||||
const char * aDefaultValueString,
|
||||
const char * aPrependString, const char* aAppendString);
|
||||
|
||||
class nsHTMLCSSUtils
|
||||
{
|
||||
public:
|
||||
nsHTMLCSSUtils();
|
||||
~nsHTMLCSSUtils();
|
||||
|
||||
enum nsCSSEditableProperty {
|
||||
eCSSEditableProperty_NONE=0,
|
||||
eCSSEditableProperty_background_color,
|
||||
eCSSEditableProperty_background_image,
|
||||
eCSSEditableProperty_border,
|
||||
eCSSEditableProperty_caption_side,
|
||||
eCSSEditableProperty_color,
|
||||
eCSSEditableProperty_float,
|
||||
eCSSEditableProperty_font_family,
|
||||
eCSSEditableProperty_font_size,
|
||||
eCSSEditableProperty_font_style,
|
||||
eCSSEditableProperty_font_weight,
|
||||
eCSSEditableProperty_height,
|
||||
eCSSEditableProperty_list_style_type,
|
||||
eCSSEditableProperty_margin_left,
|
||||
eCSSEditableProperty_margin_right,
|
||||
eCSSEditableProperty_text_align,
|
||||
eCSSEditableProperty_text_decoration,
|
||||
eCSSEditableProperty_vertical_align,
|
||||
eCSSEditableProperty_whitespace,
|
||||
eCSSEditableProperty_width
|
||||
};
|
||||
|
||||
|
||||
struct CSSEquivTable {
|
||||
nsCSSEditableProperty cssProperty;
|
||||
nsProcessValueFunc processValueFunctor;
|
||||
const char * defaultValue;
|
||||
const char * prependValue;
|
||||
const char * appendValue;
|
||||
PRBool gettable;
|
||||
PRBool caseSensitiveValue;
|
||||
};
|
||||
|
||||
public:
|
||||
nsresult Init(nsHTMLEditor * aEditor);
|
||||
|
||||
/** answers true if the given combination element_name/attribute_name
|
||||
* has a CSS equivalence in this implementation
|
||||
*
|
||||
* @return a boolean saying if the tag/attribute has a css equiv
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing a HTML tag name
|
||||
* @param aAttribute [IN] a string containing the name of a HTML attribute carried by the element above
|
||||
*/
|
||||
PRBool IsCSSEditableProperty(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** adds/remove a CSS declaration to the STYLE atrribute carried by a given element
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] an atom containing the CSS property to set
|
||||
* @param aValue [IN] a string containing the value of the CSS property
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aPropertyValue, PRBool aSuppressTransaction);
|
||||
|
||||
/** directly adds/remove a CSS declaration to the STYLE atrribute carried by
|
||||
* a given element without going through the txn manager
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a string containing the CSS property to set/remove
|
||||
* @param aValue [IN] a string containing the new value of the CSS property
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty,
|
||||
const nsAString & aValue);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty);
|
||||
|
||||
/** gets the specified/computed style value of a CSS property for a given node (or its element
|
||||
* ancestor if it is not an element)
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing the CSS property to get
|
||||
* @param aPropertyValue [OUT] the retrieved value of the property
|
||||
*/
|
||||
nsresult GetSpecifiedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
nsresult GetComputedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
|
||||
/** Removes a CSS property from the specified declarations in STYLE attribute
|
||||
** and removes the node if it is an useless span
|
||||
*
|
||||
* @param aNode [IN] the specific node we want to remove a style from
|
||||
* @param aProperty [IN] the CSS property atom to remove
|
||||
* @param aPropertyValue [IN] the value of the property we have to rremove if the property
|
||||
* accepts more than one value
|
||||
*/
|
||||
nsresult RemoveCSSInlineStyle(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString & aPropertyValue);
|
||||
|
||||
/** Answers true is the property can be removed by setting a "none" CSS value
|
||||
* on a node
|
||||
*
|
||||
* @return a boolean saying if the property can be remove by setting a "none" value
|
||||
* @param aProperty [IN] an atom containing a CSS property
|
||||
* @param aAttribute [IN] pointer to an attribute name or null if this information is irrelevant
|
||||
*/
|
||||
PRBool IsCSSInvertable(nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** Get the default browser background color if we need it for GetCSSBackgroundColorState
|
||||
*
|
||||
* @param aColor [OUT] the default color as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultBackgroundColor(nsAString & aColor);
|
||||
|
||||
/** Get the default length unit used for CSS Indent/Outdent
|
||||
*
|
||||
* @param aLengthUnit [OUT] the default length unit as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultLengthUnit(nsAString & aLengthUnit);
|
||||
|
||||
/** asnwers true if the element aElement carries an ID or a class
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aReturn [OUT] the boolean answer
|
||||
*/
|
||||
nsresult HasClassOrID(nsIDOMElement * aElement, PRBool & aReturn);
|
||||
|
||||
/** returns the list of values for the CSS equivalences to
|
||||
* the passed HTML style for the passed node
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValueString [OUT] the list of css values
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Does the node aNode (or his parent if it is not an element node) carries
|
||||
* the CSS equivalent styles to the HTML style for this node ?
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aIsSet [OUT] a boolean being true if the css properties are set
|
||||
* @param aValueString [IN/OUT] the attribute value (in) the list of css values (out)
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
PRBool & aIsSet,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Adds to the node the CSS inline styles equivalent to the HTML style
|
||||
* and return the number of CSS properties set by the call
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aCount [OUT] the number of CSS properties set by the call
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
const nsAString * aValue,
|
||||
PRInt32 * aCount,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** removes from the node the CSS inline styles equivalent to the HTML style
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult RemoveCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom *aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** parses a "xxxx.xxxxxuuu" string where x is a digit and u an alpha char
|
||||
* we need such a parser because nsIDOMCSSStyleDeclaration::GetPropertyCSSValue() is not
|
||||
* implemented
|
||||
*
|
||||
* @param aString [IN] input string to parse
|
||||
* @param aValue [OUT] numeric part
|
||||
* @param aUnit [OUT] unit part
|
||||
*/
|
||||
void ParseLength(const nsAString & aString, float * aValue, nsIAtom ** aUnit);
|
||||
|
||||
/** sets the mIsCSSPrefChecked private member ; used as callback from observer when
|
||||
* the css pref state is changed
|
||||
*
|
||||
* @param aIsCSSPrefChecked [IN] the new boolean state for the pref
|
||||
*/
|
||||
nsresult SetCSSEnabled(PRBool aIsCSSPrefChecked);
|
||||
|
||||
/** retrieves the mIsCSSPrefChecked private member, true if the css pref is checked,
|
||||
* false if it is not
|
||||
*
|
||||
* @return the boolean value of the css pref
|
||||
*/
|
||||
PRBool IsCSSPrefChecked();
|
||||
|
||||
/** ElementsSameStyle compares two elements and checks if they have the same
|
||||
* specified CSS declarations in the STYLE attribute
|
||||
* The answer is always false if at least one of them carries an ID or a class
|
||||
*
|
||||
* @return true if the two elements are considered to have same styles
|
||||
* @param aFirstNode [IN] a DOM node
|
||||
* @param aSecondNode [IN] a DOM node
|
||||
*/
|
||||
PRBool ElementsSameStyle(nsIDOMNode *aFirstNode, nsIDOMNode *aSecondNode);
|
||||
|
||||
/** get the specified inline styles (style attribute) for an element
|
||||
*
|
||||
* @param aElement [IN] the element node
|
||||
* @param aCssDecl [OUT] the CSS declaration corresponding to the style attr
|
||||
* @param aLength [OUT] the number of declarations in aCssDecl
|
||||
*/
|
||||
nsresult GetInlineStyles(nsIDOMElement * aElement, nsIDOMCSSStyleDeclaration ** aCssDecl,
|
||||
PRUint32 * aLength);
|
||||
|
||||
/** returns aNode itself if it is an element node, or the first ancestors being an element
|
||||
* node if aNode is not one itself
|
||||
*
|
||||
* @param aNode [IN] a node
|
||||
* @param aElement [OUT] the deepest element node containing aNode (possibly aNode itself)
|
||||
*/
|
||||
nsresult GetElementContainerOrSelf(nsIDOMNode * aNode, nsIDOMElement ** aElement);
|
||||
|
||||
/** Gets the default DOMView for a given node
|
||||
*
|
||||
* @param aNode the node we want the default DOMView for
|
||||
* @param aViewCSS [OUT] the default DOMViewCSS
|
||||
*/
|
||||
nsresult GetDefaultViewCSS(nsIDOMNode * aNode, nsIDOMViewCSS ** aViewCSS);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/** retrieves the css property atom from an enum
|
||||
*
|
||||
* @param aProperty [IN] the enum value for the property
|
||||
* @param aAtom [OUT] the corresponding atom
|
||||
*/
|
||||
void GetCSSPropertyAtom(nsCSSEditableProperty aProperty, nsIAtom ** aAtom);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to a HTML style value for
|
||||
* a given equivalence table
|
||||
*
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aEquivTable [IN] the equivalence table
|
||||
* @param aValue [IN] the HTML style value
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
|
||||
void BuildCSSDeclarations(nsVoidArray & aPropertyArray,
|
||||
nsStringArray & cssValueArray,
|
||||
const CSSEquivTable * aEquivTable,
|
||||
const nsAString * aValue,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to the given HTML property/attribute/value
|
||||
* for a given node
|
||||
*
|
||||
* @param aNode [IN] the DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
void GenerateCSSDeclarationsFromHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
nsVoidArray & aPropertyArray,
|
||||
nsStringArray & aValueArray,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** creates a Transaction for setting or removing a css property
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [IN] the value to remove for this CSS property or the empty string if irrelevant
|
||||
* @param aTxn [OUT] the created transaction
|
||||
* @param aRemoveProperty [IN] true if we create a "remove" transaction, false for a "set"
|
||||
*/
|
||||
nsresult CreateCSSPropertyTxn(nsIDOMElement * aElement,
|
||||
nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
ChangeCSSInlineStyleTxn ** aTxn,
|
||||
PRBool aRemoveProperty);
|
||||
|
||||
/** back-end for GetSpecifiedProperty and GetComputedProperty
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [OUT] the retrieved value for this property
|
||||
* @param aViewCSS [IN] the ViewCSS we need in case we query computed styles
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSInlinePropertyBase(nsIDOMNode * aNode, nsIAtom * aProperty,
|
||||
nsAString & aValue,
|
||||
nsIDOMViewCSS * aViewCSS,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
|
||||
private:
|
||||
nsHTMLEditor *mHTMLEditor;
|
||||
PRBool mIsCSSPrefChecked;
|
||||
|
||||
};
|
||||
|
||||
nsresult NS_NewHTMLCSSUtils(nsHTMLCSSUtils** aInstancePtrResult);
|
||||
|
||||
#define NS_EDITOR_INDENT_INCREMENT_IN 0.4134f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_CM 1.05f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_MM 10.5f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PT 29.76f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PC 2.48f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EM 3
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EX 6
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PX 40
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PERCENT 4
|
||||
|
||||
#endif /* nsHTMLCSSUtils_h__ */
|
|
@ -0,0 +1,41 @@
|
|||
#!env perl
|
||||
|
||||
# The contents of this file are subject to the Mozilla Public
|
||||
# License Version 1.1 (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.mozilla.org/MPL/
|
||||
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 2002 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
fallback_original_code_is=mozilla.org code
|
|
@ -0,0 +1,46 @@
|
|||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is Mozilla Communicator client code, released
|
||||
# March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the
|
||||
# terms of the GNU Public License (the "GPL"), in which case the
|
||||
# provisions of the GPL are applicable instead of those above.
|
||||
# If you wish to allow use of your version of this file only
|
||||
# under the terms of the GPL and not to allow others to use your
|
||||
# version of this file under the NPL, indicate your decision by
|
||||
# deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this
|
||||
# file under either the NPL or the GPL.
|
||||
#
|
||||
# This Original Code has been modified by IBM Corporation.
|
||||
# Modifications made by IBM described herein are
|
||||
# Copyright (c) International Business Machines
|
||||
# Corporation, 2000
|
||||
#
|
||||
# Modifications to Mozilla code or documentation
|
||||
# identified per MPL Section 3.3
|
||||
#
|
||||
# Date Modified by Description of modification
|
||||
# 04/20/2000 IBM Corp. OS/2 VisualAge build.
|
||||
|
||||
use strict;
|
||||
|
||||
# snip ...
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
// This is my own personal LiceNse.
|
||||
|
||||
int main(void) {
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
This line is part of the 'Contributor(s):' paragraph but (1) is not indented and (2) does not look like it contains an email address: relicense_tmp/bad_contributor_section.cpp:20: ' * Keith Visco '
|
|
@ -0,0 +1,65 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code, released
|
||||
* March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK *****
|
||||
*
|
||||
* This Original Code has been modified by IBM Corporation.
|
||||
* Modifications made by IBM described herein are
|
||||
* Copyright (c) International Business Machines
|
||||
* Corporation, 2000
|
||||
*
|
||||
* Modifications to Mozilla code or documentation
|
||||
* identified per MPL Section 3.3
|
||||
*
|
||||
* Date Modified by Description of modification
|
||||
* 04/20/2000 IBM Corp. OS/2 VisualAge build.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of the Java-vendor-neutral implementation of LiveConnect
|
||||
*
|
||||
* It contains the native code implementation of JS's JavaObject class.
|
||||
*
|
||||
* An instance of JavaObject is the JavaScript reflection of a Java object.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* snip ... */
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (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.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is mozilla.org code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications Corp.
|
||||
- Portions created by the Initial Developer are Copyright (C) 2001
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
- Bob Lord <lord@netscape.com>
|
||||
- Ian McGreer <mcgreer@netscape.com>
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
- or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
|
||||
<!DOCTYPE overlay SYSTEM "chrome://pippki/locale/certManager.dtd">
|
||||
|
||||
<overlay id="CAOverlay"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cert="http://netscape.com/rdf-cert#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<vbox id="CACerts">
|
||||
<description>&certmgr.cas;</description>
|
||||
<separator class="thin"/>
|
||||
<tree id="ca-tree" flex="1" enableColumnDrag="true"
|
||||
onselect="ca_enableButtons()">
|
||||
<treecols>
|
||||
<treecol id="certcol" label="&certmgr.certname;" primary="true"
|
||||
persist="hidden width ordinal" flex="1"/>
|
||||
<splitter class="tree-splitter"/>
|
||||
<treecol id="tokencol" label="&certmgr.tokenname;"
|
||||
persist="hidden width ordinal" flex="1"/>
|
||||
<!-- <treecol id="certdbkeycol" collapsed="true" flex="1"/> -->
|
||||
</treecols>
|
||||
<treechildren ondblclick="viewCerts();"/>
|
||||
</tree>
|
||||
<hbox>
|
||||
<button id="ca_viewButton"
|
||||
label="&certmgr.view.label;"
|
||||
disabled="true" oncommand="viewCerts();"/>
|
||||
<button id="ca_editButton"
|
||||
label="&certmgr.edit.label;"
|
||||
disabled="true" oncommand="editCerts();"/>
|
||||
<button id="ca_addButton"
|
||||
label="&certmgr.restore.label;"
|
||||
oncommand="addCACerts();"/>
|
||||
<button id="ca_deleteButton"
|
||||
label="&certmgr.delete.label;"
|
||||
disabled="true" oncommand="deleteCerts();"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</overlay>
|
|
@ -0,0 +1,412 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Original Author: Daniel Glazman <glazman@netscape.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsHTMLCSSUtils_h__
|
||||
#define nsHTMLCSSUtils_h__
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMViewCSS.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIHTMLEditor.h"
|
||||
#include "ChangeCSSInlineStyleTxn.h"
|
||||
#include "nsEditProperty.h"
|
||||
#include "nsIDOMCSSStyleDeclaration.h"
|
||||
|
||||
#define SPECIFIED_STYLE_TYPE 1
|
||||
#define COMPUTED_STYLE_TYPE 2
|
||||
|
||||
class nsHTMLEditor;
|
||||
|
||||
typedef void (*nsProcessValueFunc)(const nsAString * aInputString, nsAString & aOutputString,
|
||||
const char * aDefaultValueString,
|
||||
const char * aPrependString, const char* aAppendString);
|
||||
|
||||
class nsHTMLCSSUtils
|
||||
{
|
||||
public:
|
||||
nsHTMLCSSUtils();
|
||||
~nsHTMLCSSUtils();
|
||||
|
||||
enum nsCSSEditableProperty {
|
||||
eCSSEditableProperty_NONE=0,
|
||||
eCSSEditableProperty_background_color,
|
||||
eCSSEditableProperty_background_image,
|
||||
eCSSEditableProperty_border,
|
||||
eCSSEditableProperty_caption_side,
|
||||
eCSSEditableProperty_color,
|
||||
eCSSEditableProperty_float,
|
||||
eCSSEditableProperty_font_family,
|
||||
eCSSEditableProperty_font_size,
|
||||
eCSSEditableProperty_font_style,
|
||||
eCSSEditableProperty_font_weight,
|
||||
eCSSEditableProperty_height,
|
||||
eCSSEditableProperty_list_style_type,
|
||||
eCSSEditableProperty_margin_left,
|
||||
eCSSEditableProperty_margin_right,
|
||||
eCSSEditableProperty_text_align,
|
||||
eCSSEditableProperty_text_decoration,
|
||||
eCSSEditableProperty_vertical_align,
|
||||
eCSSEditableProperty_whitespace,
|
||||
eCSSEditableProperty_width
|
||||
};
|
||||
|
||||
|
||||
struct CSSEquivTable {
|
||||
nsCSSEditableProperty cssProperty;
|
||||
nsProcessValueFunc processValueFunctor;
|
||||
const char * defaultValue;
|
||||
const char * prependValue;
|
||||
const char * appendValue;
|
||||
PRBool gettable;
|
||||
PRBool caseSensitiveValue;
|
||||
};
|
||||
|
||||
public:
|
||||
nsresult Init(nsHTMLEditor * aEditor);
|
||||
|
||||
/** answers true if the given combination element_name/attribute_name
|
||||
* has a CSS equivalence in this implementation
|
||||
*
|
||||
* @return a boolean saying if the tag/attribute has a css equiv
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing a HTML tag name
|
||||
* @param aAttribute [IN] a string containing the name of a HTML attribute carried by the element above
|
||||
*/
|
||||
PRBool IsCSSEditableProperty(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** adds/remove a CSS declaration to the STYLE atrribute carried by a given element
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] an atom containing the CSS property to set
|
||||
* @param aValue [IN] a string containing the value of the CSS property
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aPropertyValue, PRBool aSuppressTransaction);
|
||||
|
||||
/** directly adds/remove a CSS declaration to the STYLE atrribute carried by
|
||||
* a given element without going through the txn manager
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a string containing the CSS property to set/remove
|
||||
* @param aValue [IN] a string containing the new value of the CSS property
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty,
|
||||
const nsAString & aValue);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty);
|
||||
|
||||
/** gets the specified/computed style value of a CSS property for a given node (or its element
|
||||
* ancestor if it is not an element)
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing the CSS property to get
|
||||
* @param aPropertyValue [OUT] the retrieved value of the property
|
||||
*/
|
||||
nsresult GetSpecifiedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
nsresult GetComputedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
|
||||
/** Removes a CSS property from the specified declarations in STYLE attribute
|
||||
** and removes the node if it is an useless span
|
||||
*
|
||||
* @param aNode [IN] the specific node we want to remove a style from
|
||||
* @param aProperty [IN] the CSS property atom to remove
|
||||
* @param aPropertyValue [IN] the value of the property we have to rremove if the property
|
||||
* accepts more than one value
|
||||
*/
|
||||
nsresult RemoveCSSInlineStyle(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString & aPropertyValue);
|
||||
|
||||
/** Answers true is the property can be removed by setting a "none" CSS value
|
||||
* on a node
|
||||
*
|
||||
* @return a boolean saying if the property can be remove by setting a "none" value
|
||||
* @param aProperty [IN] an atom containing a CSS property
|
||||
* @param aAttribute [IN] pointer to an attribute name or null if this information is irrelevant
|
||||
*/
|
||||
PRBool IsCSSInvertable(nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** Get the default browser background color if we need it for GetCSSBackgroundColorState
|
||||
*
|
||||
* @param aColor [OUT] the default color as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultBackgroundColor(nsAString & aColor);
|
||||
|
||||
/** Get the default length unit used for CSS Indent/Outdent
|
||||
*
|
||||
* @param aLengthUnit [OUT] the default length unit as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultLengthUnit(nsAString & aLengthUnit);
|
||||
|
||||
/** asnwers true if the element aElement carries an ID or a class
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aReturn [OUT] the boolean answer
|
||||
*/
|
||||
nsresult HasClassOrID(nsIDOMElement * aElement, PRBool & aReturn);
|
||||
|
||||
/** returns the list of values for the CSS equivalences to
|
||||
* the passed HTML style for the passed node
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValueString [OUT] the list of css values
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Does the node aNode (or his parent if it is not an element node) carries
|
||||
* the CSS equivalent styles to the HTML style for this node ?
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aIsSet [OUT] a boolean being true if the css properties are set
|
||||
* @param aValueString [IN/OUT] the attribute value (in) the list of css values (out)
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
PRBool & aIsSet,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Adds to the node the CSS inline styles equivalent to the HTML style
|
||||
* and return the number of CSS properties set by the call
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aCount [OUT] the number of CSS properties set by the call
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
const nsAString * aValue,
|
||||
PRInt32 * aCount,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** removes from the node the CSS inline styles equivalent to the HTML style
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult RemoveCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom *aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** parses a "xxxx.xxxxxuuu" string where x is a digit and u an alpha char
|
||||
* we need such a parser because nsIDOMCSSStyleDeclaration::GetPropertyCSSValue() is not
|
||||
* implemented
|
||||
*
|
||||
* @param aString [IN] input string to parse
|
||||
* @param aValue [OUT] numeric part
|
||||
* @param aUnit [OUT] unit part
|
||||
*/
|
||||
void ParseLength(const nsAString & aString, float * aValue, nsIAtom ** aUnit);
|
||||
|
||||
/** sets the mIsCSSPrefChecked private member ; used as callback from observer when
|
||||
* the css pref state is changed
|
||||
*
|
||||
* @param aIsCSSPrefChecked [IN] the new boolean state for the pref
|
||||
*/
|
||||
nsresult SetCSSEnabled(PRBool aIsCSSPrefChecked);
|
||||
|
||||
/** retrieves the mIsCSSPrefChecked private member, true if the css pref is checked,
|
||||
* false if it is not
|
||||
*
|
||||
* @return the boolean value of the css pref
|
||||
*/
|
||||
PRBool IsCSSPrefChecked();
|
||||
|
||||
/** ElementsSameStyle compares two elements and checks if they have the same
|
||||
* specified CSS declarations in the STYLE attribute
|
||||
* The answer is always false if at least one of them carries an ID or a class
|
||||
*
|
||||
* @return true if the two elements are considered to have same styles
|
||||
* @param aFirstNode [IN] a DOM node
|
||||
* @param aSecondNode [IN] a DOM node
|
||||
*/
|
||||
PRBool ElementsSameStyle(nsIDOMNode *aFirstNode, nsIDOMNode *aSecondNode);
|
||||
|
||||
/** get the specified inline styles (style attribute) for an element
|
||||
*
|
||||
* @param aElement [IN] the element node
|
||||
* @param aCssDecl [OUT] the CSS declaration corresponding to the style attr
|
||||
* @param aLength [OUT] the number of declarations in aCssDecl
|
||||
*/
|
||||
nsresult GetInlineStyles(nsIDOMElement * aElement, nsIDOMCSSStyleDeclaration ** aCssDecl,
|
||||
PRUint32 * aLength);
|
||||
|
||||
/** returns aNode itself if it is an element node, or the first ancestors being an element
|
||||
* node if aNode is not one itself
|
||||
*
|
||||
* @param aNode [IN] a node
|
||||
* @param aElement [OUT] the deepest element node containing aNode (possibly aNode itself)
|
||||
*/
|
||||
nsresult GetElementContainerOrSelf(nsIDOMNode * aNode, nsIDOMElement ** aElement);
|
||||
|
||||
/** Gets the default DOMView for a given node
|
||||
*
|
||||
* @param aNode the node we want the default DOMView for
|
||||
* @param aViewCSS [OUT] the default DOMViewCSS
|
||||
*/
|
||||
nsresult GetDefaultViewCSS(nsIDOMNode * aNode, nsIDOMViewCSS ** aViewCSS);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/** retrieves the css property atom from an enum
|
||||
*
|
||||
* @param aProperty [IN] the enum value for the property
|
||||
* @param aAtom [OUT] the corresponding atom
|
||||
*/
|
||||
void GetCSSPropertyAtom(nsCSSEditableProperty aProperty, nsIAtom ** aAtom);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to a HTML style value for
|
||||
* a given equivalence table
|
||||
*
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aEquivTable [IN] the equivalence table
|
||||
* @param aValue [IN] the HTML style value
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
|
||||
void BuildCSSDeclarations(nsVoidArray & aPropertyArray,
|
||||
nsStringArray & cssValueArray,
|
||||
const CSSEquivTable * aEquivTable,
|
||||
const nsAString * aValue,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to the given HTML property/attribute/value
|
||||
* for a given node
|
||||
*
|
||||
* @param aNode [IN] the DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
void GenerateCSSDeclarationsFromHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
nsVoidArray & aPropertyArray,
|
||||
nsStringArray & aValueArray,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** creates a Transaction for setting or removing a css property
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [IN] the value to remove for this CSS property or the empty string if irrelevant
|
||||
* @param aTxn [OUT] the created transaction
|
||||
* @param aRemoveProperty [IN] true if we create a "remove" transaction, false for a "set"
|
||||
*/
|
||||
nsresult CreateCSSPropertyTxn(nsIDOMElement * aElement,
|
||||
nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
ChangeCSSInlineStyleTxn ** aTxn,
|
||||
PRBool aRemoveProperty);
|
||||
|
||||
/** back-end for GetSpecifiedProperty and GetComputedProperty
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [OUT] the retrieved value for this property
|
||||
* @param aViewCSS [IN] the ViewCSS we need in case we query computed styles
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSInlinePropertyBase(nsIDOMNode * aNode, nsIAtom * aProperty,
|
||||
nsAString & aValue,
|
||||
nsIDOMViewCSS * aViewCSS,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
|
||||
private:
|
||||
nsHTMLEditor *mHTMLEditor;
|
||||
PRBool mIsCSSPrefChecked;
|
||||
|
||||
};
|
||||
|
||||
nsresult NS_NewHTMLCSSUtils(nsHTMLCSSUtils** aInstancePtrResult);
|
||||
|
||||
#define NS_EDITOR_INDENT_INCREMENT_IN 0.4134f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_CM 1.05f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_MM 10.5f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PT 29.76f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PC 2.48f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EM 3
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EX 6
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PX 40
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PERCENT 4
|
||||
|
||||
#endif /* nsHTMLCSSUtils_h__ */
|
|
@ -0,0 +1,107 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<head>
|
||||
|
||||
<meta name="generator"
|
||||
|
||||
content="HTML Tidy for Mac OS, see www.w3.org" />
|
||||
|
||||
<title>thead_align_center.xml</title>
|
||||
|
||||
<!-- Modified: Changed doctype to xhtml 1.0 transitional Author: Chris Petersen Date: 2/01/01 -->
|
||||
|
||||
<!--
|
||||
|
||||
- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (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.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is Mozilla Communicator Test Cases.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Netscape Communications.
|
||||
- Portions created by the Initial Developer are Copyright (C) 2001
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
- Christine Dreckman Date: 1/13/99
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
- or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<p>In this test, the THEAD text should be center aligned</p>
|
||||
|
||||
|
||||
|
||||
<table border="1">
|
||||
|
||||
<thead align="center">
|
||||
|
||||
<tr>
|
||||
|
||||
<td>THEAD</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
|
||||
|
||||
|
||||
<tfoot>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>This text is in the TFOOT</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tfoot>
|
||||
|
||||
|
||||
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>This text is in the TBODY</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Owen Taylor <otaylor@redhat.com> and Christopher Blizzard <blizzard@redhat.com>.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef __GTK_MOZAREA_H__
|
||||
#define __GTK_MOZAREA_H__
|
||||
|
||||
#include <gtk/gtkwindow.h>
|
||||
#include "gdksuperwin.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct _GtkMozArea GtkMozArea;
|
||||
typedef struct _GtkMozAreaClass GtkMozAreaClass;
|
||||
|
||||
#define GTK_TYPE_MOZAREA (gtk_mozarea_get_type ())
|
||||
#define GTK_MOZAREA(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_MOZAREA, GtkMozArea))
|
||||
#define GTK_MOZAREA_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_MOZAREA, GtkMozAreaClass))
|
||||
#define GTK_IS_MOZAREA(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_MOZAREA))
|
||||
#define GTK_IS_MOZAREA_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MOZAREA))
|
||||
|
||||
struct _GtkMozArea
|
||||
{
|
||||
GtkWidget widget;
|
||||
GdkSuperWin *superwin;
|
||||
gboolean toplevel_focus;
|
||||
|
||||
/* store away the toplevel window */
|
||||
GdkWindow *toplevel_window;
|
||||
};
|
||||
|
||||
struct _GtkMozAreaClass
|
||||
{
|
||||
GtkWindowClass window_class;
|
||||
|
||||
/* signals */
|
||||
void (* toplevel_focus_in ) (GtkMozArea *area);
|
||||
void (* toplevel_focus_out) (GtkMozArea *area);
|
||||
void (* toplevel_configure) (GtkMozArea *area);
|
||||
};
|
||||
|
||||
GtkType gtk_mozarea_get_type (void);
|
||||
GtkWidget *gtk_mozarea_new ();
|
||||
gboolean gtk_mozarea_get_toplevel_focus(GtkMozArea *area);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __GTK_MOZAREA_H__ */
|
|
@ -0,0 +1,412 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (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.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Daniel Glazman <glazman@netscape.com>, foo@bar.org
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsHTMLCSSUtils_h__
|
||||
#define nsHTMLCSSUtils_h__
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMViewCSS.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIHTMLEditor.h"
|
||||
#include "ChangeCSSInlineStyleTxn.h"
|
||||
#include "nsEditProperty.h"
|
||||
#include "nsIDOMCSSStyleDeclaration.h"
|
||||
|
||||
#define SPECIFIED_STYLE_TYPE 1
|
||||
#define COMPUTED_STYLE_TYPE 2
|
||||
|
||||
class nsHTMLEditor;
|
||||
|
||||
typedef void (*nsProcessValueFunc)(const nsAString * aInputString, nsAString & aOutputString,
|
||||
const char * aDefaultValueString,
|
||||
const char * aPrependString, const char* aAppendString);
|
||||
|
||||
class nsHTMLCSSUtils
|
||||
{
|
||||
public:
|
||||
nsHTMLCSSUtils();
|
||||
~nsHTMLCSSUtils();
|
||||
|
||||
enum nsCSSEditableProperty {
|
||||
eCSSEditableProperty_NONE=0,
|
||||
eCSSEditableProperty_background_color,
|
||||
eCSSEditableProperty_background_image,
|
||||
eCSSEditableProperty_border,
|
||||
eCSSEditableProperty_caption_side,
|
||||
eCSSEditableProperty_color,
|
||||
eCSSEditableProperty_float,
|
||||
eCSSEditableProperty_font_family,
|
||||
eCSSEditableProperty_font_size,
|
||||
eCSSEditableProperty_font_style,
|
||||
eCSSEditableProperty_font_weight,
|
||||
eCSSEditableProperty_height,
|
||||
eCSSEditableProperty_list_style_type,
|
||||
eCSSEditableProperty_margin_left,
|
||||
eCSSEditableProperty_margin_right,
|
||||
eCSSEditableProperty_text_align,
|
||||
eCSSEditableProperty_text_decoration,
|
||||
eCSSEditableProperty_vertical_align,
|
||||
eCSSEditableProperty_whitespace,
|
||||
eCSSEditableProperty_width
|
||||
};
|
||||
|
||||
|
||||
struct CSSEquivTable {
|
||||
nsCSSEditableProperty cssProperty;
|
||||
nsProcessValueFunc processValueFunctor;
|
||||
const char * defaultValue;
|
||||
const char * prependValue;
|
||||
const char * appendValue;
|
||||
PRBool gettable;
|
||||
PRBool caseSensitiveValue;
|
||||
};
|
||||
|
||||
public:
|
||||
nsresult Init(nsHTMLEditor * aEditor);
|
||||
|
||||
/** answers true if the given combination element_name/attribute_name
|
||||
* has a CSS equivalence in this implementation
|
||||
*
|
||||
* @return a boolean saying if the tag/attribute has a css equiv
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing a HTML tag name
|
||||
* @param aAttribute [IN] a string containing the name of a HTML attribute carried by the element above
|
||||
*/
|
||||
PRBool IsCSSEditableProperty(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** adds/remove a CSS declaration to the STYLE atrribute carried by a given element
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] an atom containing the CSS property to set
|
||||
* @param aValue [IN] a string containing the value of the CSS property
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
|
||||
const nsAString & aPropertyValue, PRBool aSuppressTransaction);
|
||||
|
||||
/** directly adds/remove a CSS declaration to the STYLE atrribute carried by
|
||||
* a given element without going through the txn manager
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a string containing the CSS property to set/remove
|
||||
* @param aValue [IN] a string containing the new value of the CSS property
|
||||
*/
|
||||
nsresult SetCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty,
|
||||
const nsAString & aValue);
|
||||
nsresult RemoveCSSProperty(nsIDOMElement * aElement,
|
||||
const nsAString & aProperty);
|
||||
|
||||
/** gets the specified/computed style value of a CSS property for a given node (or its element
|
||||
* ancestor if it is not an element)
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] an atom containing the CSS property to get
|
||||
* @param aPropertyValue [OUT] the retrieved value of the property
|
||||
*/
|
||||
nsresult GetSpecifiedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
nsresult GetComputedProperty(nsIDOMNode *aNode, nsIAtom *aProperty,
|
||||
nsAString & aValue);
|
||||
|
||||
/** Removes a CSS property from the specified declarations in STYLE attribute
|
||||
** and removes the node if it is an useless span
|
||||
*
|
||||
* @param aNode [IN] the specific node we want to remove a style from
|
||||
* @param aProperty [IN] the CSS property atom to remove
|
||||
* @param aPropertyValue [IN] the value of the property we have to rremove if the property
|
||||
* accepts more than one value
|
||||
*/
|
||||
nsresult RemoveCSSInlineStyle(nsIDOMNode * aNode, nsIAtom * aProperty, const nsAString & aPropertyValue);
|
||||
|
||||
/** Answers true is the property can be removed by setting a "none" CSS value
|
||||
* on a node
|
||||
*
|
||||
* @return a boolean saying if the property can be remove by setting a "none" value
|
||||
* @param aProperty [IN] an atom containing a CSS property
|
||||
* @param aAttribute [IN] pointer to an attribute name or null if this information is irrelevant
|
||||
*/
|
||||
PRBool IsCSSInvertable(nsIAtom * aProperty, const nsAString * aAttribute);
|
||||
|
||||
/** Get the default browser background color if we need it for GetCSSBackgroundColorState
|
||||
*
|
||||
* @param aColor [OUT] the default color as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultBackgroundColor(nsAString & aColor);
|
||||
|
||||
/** Get the default length unit used for CSS Indent/Outdent
|
||||
*
|
||||
* @param aLengthUnit [OUT] the default length unit as it is defined in prefs
|
||||
*/
|
||||
nsresult GetDefaultLengthUnit(nsAString & aLengthUnit);
|
||||
|
||||
/** asnwers true if the element aElement carries an ID or a class
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aReturn [OUT] the boolean answer
|
||||
*/
|
||||
nsresult HasClassOrID(nsIDOMElement * aElement, PRBool & aReturn);
|
||||
|
||||
/** returns the list of values for the CSS equivalences to
|
||||
* the passed HTML style for the passed node
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValueString [OUT] the list of css values
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Does the node aNode (or his parent if it is not an element node) carries
|
||||
* the CSS equivalent styles to the HTML style for this node ?
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aIsSet [OUT] a boolean being true if the css properties are set
|
||||
* @param aValueString [IN/OUT] the attribute value (in) the list of css values (out)
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
PRBool & aIsSet,
|
||||
nsAString & aValueString,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
/** Adds to the node the CSS inline styles equivalent to the HTML style
|
||||
* and return the number of CSS properties set by the call
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aCount [OUT] the number of CSS properties set by the call
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult SetCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString * aAttribute,
|
||||
const nsAString * aValue,
|
||||
PRInt32 * aCount,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** removes from the node the CSS inline styles equivalent to the HTML style
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aSuppressTransaction [IN] a boolean indicating, when true,
|
||||
* that no transaction should be recorded
|
||||
*/
|
||||
nsresult RemoveCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom *aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
PRBool aSuppressTransaction);
|
||||
|
||||
/** parses a "xxxx.xxxxxuuu" string where x is a digit and u an alpha char
|
||||
* we need such a parser because nsIDOMCSSStyleDeclaration::GetPropertyCSSValue() is not
|
||||
* implemented
|
||||
*
|
||||
* @param aString [IN] input string to parse
|
||||
* @param aValue [OUT] numeric part
|
||||
* @param aUnit [OUT] unit part
|
||||
*/
|
||||
void ParseLength(const nsAString & aString, float * aValue, nsIAtom ** aUnit);
|
||||
|
||||
/** sets the mIsCSSPrefChecked private member ; used as callback from observer when
|
||||
* the css pref state is changed
|
||||
*
|
||||
* @param aIsCSSPrefChecked [IN] the new boolean state for the pref
|
||||
*/
|
||||
nsresult SetCSSEnabled(PRBool aIsCSSPrefChecked);
|
||||
|
||||
/** retrieves the mIsCSSPrefChecked private member, true if the css pref is checked,
|
||||
* false if it is not
|
||||
*
|
||||
* @return the boolean value of the css pref
|
||||
*/
|
||||
PRBool IsCSSPrefChecked();
|
||||
|
||||
/** ElementsSameStyle compares two elements and checks if they have the same
|
||||
* specified CSS declarations in the STYLE attribute
|
||||
* The answer is always false if at least one of them carries an ID or a class
|
||||
*
|
||||
* @return true if the two elements are considered to have same styles
|
||||
* @param aFirstNode [IN] a DOM node
|
||||
* @param aSecondNode [IN] a DOM node
|
||||
*/
|
||||
PRBool ElementsSameStyle(nsIDOMNode *aFirstNode, nsIDOMNode *aSecondNode);
|
||||
|
||||
/** get the specified inline styles (style attribute) for an element
|
||||
*
|
||||
* @param aElement [IN] the element node
|
||||
* @param aCssDecl [OUT] the CSS declaration corresponding to the style attr
|
||||
* @param aLength [OUT] the number of declarations in aCssDecl
|
||||
*/
|
||||
nsresult GetInlineStyles(nsIDOMElement * aElement, nsIDOMCSSStyleDeclaration ** aCssDecl,
|
||||
PRUint32 * aLength);
|
||||
|
||||
/** returns aNode itself if it is an element node, or the first ancestors being an element
|
||||
* node if aNode is not one itself
|
||||
*
|
||||
* @param aNode [IN] a node
|
||||
* @param aElement [OUT] the deepest element node containing aNode (possibly aNode itself)
|
||||
*/
|
||||
nsresult GetElementContainerOrSelf(nsIDOMNode * aNode, nsIDOMElement ** aElement);
|
||||
|
||||
/** Gets the default DOMView for a given node
|
||||
*
|
||||
* @param aNode the node we want the default DOMView for
|
||||
* @param aViewCSS [OUT] the default DOMViewCSS
|
||||
*/
|
||||
nsresult GetDefaultViewCSS(nsIDOMNode * aNode, nsIDOMViewCSS ** aViewCSS);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/** retrieves the css property atom from an enum
|
||||
*
|
||||
* @param aProperty [IN] the enum value for the property
|
||||
* @param aAtom [OUT] the corresponding atom
|
||||
*/
|
||||
void GetCSSPropertyAtom(nsCSSEditableProperty aProperty, nsIAtom ** aAtom);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to a HTML style value for
|
||||
* a given equivalence table
|
||||
*
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aEquivTable [IN] the equivalence table
|
||||
* @param aValue [IN] the HTML style value
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
|
||||
void BuildCSSDeclarations(nsVoidArray & aPropertyArray,
|
||||
nsStringArray & cssValueArray,
|
||||
const CSSEquivTable * aEquivTable,
|
||||
const nsAString * aValue,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** retrieves the CSS declarations equivalent to the given HTML property/attribute/value
|
||||
* for a given node
|
||||
*
|
||||
* @param aNode [IN] the DOM node
|
||||
* @param aHTMLProperty [IN] an atom containing an HTML property
|
||||
* @param aAttribute [IN] a pointer to an attribute name or nsnull if irrelevant
|
||||
* @param aValue [IN] the attribute value
|
||||
* @param aPropertyArray [OUT] the array of css properties
|
||||
* @param aValueArray [OUT] the array of values for the css properties above
|
||||
* @param aGetOrRemoveRequest [IN] a boolean value being true if the call to the current method
|
||||
* is made for GetCSSEquivalentToHTMLInlineStyleSet or
|
||||
* RemoveCSSEquivalentToHTMLInlineStyleSet
|
||||
*/
|
||||
void GenerateCSSDeclarationsFromHTMLStyle(nsIDOMNode * aNode,
|
||||
nsIAtom * aHTMLProperty,
|
||||
const nsAString *aAttribute,
|
||||
const nsAString *aValue,
|
||||
nsVoidArray & aPropertyArray,
|
||||
nsStringArray & aValueArray,
|
||||
PRBool aGetOrRemoveRequest);
|
||||
|
||||
/** creates a Transaction for setting or removing a css property
|
||||
*
|
||||
* @param aElement [IN] a DOM element
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [IN] the value to remove for this CSS property or the empty string if irrelevant
|
||||
* @param aTxn [OUT] the created transaction
|
||||
* @param aRemoveProperty [IN] true if we create a "remove" transaction, false for a "set"
|
||||
*/
|
||||
nsresult CreateCSSPropertyTxn(nsIDOMElement * aElement,
|
||||
nsIAtom * aProperty,
|
||||
const nsAString & aValue,
|
||||
ChangeCSSInlineStyleTxn ** aTxn,
|
||||
PRBool aRemoveProperty);
|
||||
|
||||
/** back-end for GetSpecifiedProperty and GetComputedProperty
|
||||
*
|
||||
* @param aNode [IN] a DOM node
|
||||
* @param aProperty [IN] a CSS property
|
||||
* @param aValue [OUT] the retrieved value for this property
|
||||
* @param aViewCSS [IN] the ViewCSS we need in case we query computed styles
|
||||
* @param aStyleType [IN] SPECIFIED_STYLE_TYPE to query the specified style values
|
||||
COMPUTED_STYLE_TYPE to query the computed style values
|
||||
*/
|
||||
nsresult GetCSSInlinePropertyBase(nsIDOMNode * aNode, nsIAtom * aProperty,
|
||||
nsAString & aValue,
|
||||
nsIDOMViewCSS * aViewCSS,
|
||||
PRUint8 aStyleType);
|
||||
|
||||
|
||||
private:
|
||||
nsHTMLEditor *mHTMLEditor;
|
||||
PRBool mIsCSSPrefChecked;
|
||||
|
||||
};
|
||||
|
||||
nsresult NS_NewHTMLCSSUtils(nsHTMLCSSUtils** aInstancePtrResult);
|
||||
|
||||
#define NS_EDITOR_INDENT_INCREMENT_IN 0.4134f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_CM 1.05f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_MM 10.5f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PT 29.76f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PC 2.48f
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EM 3
|
||||
#define NS_EDITOR_INDENT_INCREMENT_EX 6
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PX 40
|
||||
#define NS_EDITOR_INDENT_INCREMENT_PERCENT 4
|
||||
|
||||
#endif /* nsHTMLCSSUtils_h__ */
|
|
@ -0,0 +1,67 @@
|
|||
#!env perl
|
||||
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (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.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 2002
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
use File::Spec::Unix;
|
||||
use strict;
|
||||
|
||||
print "Usage: $0 dest_path start_path\n" if ($#ARGV+1 != 2);
|
||||
my $finish = my_canonpath(shift);
|
||||
my $start = my_canonpath(shift);
|
||||
|
||||
my $res = File::Spec::Unix->abs2rel($finish, $start);
|
||||
|
||||
#print STDERR "abs2rel($finish,$start) = $res\n";
|
||||
print "$res\n";
|
||||
|
||||
sub my_canonpath($) {
|
||||
my ($file) = @_;
|
||||
my (@inlist, @outlist, $dir);
|
||||
|
||||
# Do what File::Spec::Unix->no_upwards should do
|
||||
my @inlist = split(/\//, File::Spec::Unix->canonpath($file));
|
||||
foreach $dir (@inlist) {
|
||||
if ($dir eq '..') {
|
||||
pop @outlist;
|
||||
} else {
|
||||
push @outlist, $dir;
|
||||
}
|
||||
}
|
||||
$file = join '/',@outlist;
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is Mozilla Communicator client code, released
|
||||
# March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Netscape Communications Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 1998
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the NPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the NPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
#
|
||||
# This Original Code has been modified by IBM Corporation.
|
||||
# Modifications made by IBM described herein are
|
||||
# Copyright (c) International Business Machines
|
||||
# Corporation, 2000
|
||||
#
|
||||
# Modifications to Mozilla code or documentation
|
||||
# identified per MPL Section 3.3
|
||||
#
|
||||
# Date Modified by Description of modification
|
||||
# 04/20/2000 IBM Corp. OS/2 VisualAge build.
|
||||
|
||||
use strict;
|
||||
|
||||
# snip ...
|
||||
|
|
@ -0,0 +1 @@
|
|||
relicense_tmp/unknown_license.c: unknown license (possibly) found
|
|
@ -0,0 +1,169 @@
|
|||
#!python
|
||||
|
||||
# Copyright (c) 2004 Trent Mick
|
||||
|
||||
"""
|
||||
relic.py Regression Test Suite Harness
|
||||
|
||||
Usage:
|
||||
python test.py [<options>...] [<tests>...]
|
||||
|
||||
Options:
|
||||
-x <testname>, --exclude=<testname>
|
||||
Exclude the named test from the set of tests to be
|
||||
run. This can be used multiple times to specify
|
||||
multiple exclusions.
|
||||
-v, --verbose run tests in verbose mode with output to stdout
|
||||
-q, --quiet don't print anything except if a test fails
|
||||
-h, --help print this text and exit
|
||||
|
||||
This will find all modules whose name is "test_*" in the test
|
||||
directory, and run them. Various command line options provide
|
||||
additional facilities.
|
||||
|
||||
If non-option arguments are present, they are names for tests to run.
|
||||
If no test names are given, all tests are run.
|
||||
|
||||
Test Setup Options:
|
||||
-c, --clean Don't setup, just clean up the test workspace.
|
||||
-n, --no-clean Don't clean up after setting up and running the
|
||||
test suite.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import getopt
|
||||
import glob
|
||||
import time
|
||||
import types
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
|
||||
|
||||
#---- exceptions
|
||||
|
||||
class TestError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
#---- globals
|
||||
|
||||
gVerbosity = 2
|
||||
|
||||
|
||||
#---- utility routines
|
||||
|
||||
def _rmtreeOnError(rmFunction, filePath, excInfo):
|
||||
if excInfo[0] == OSError:
|
||||
# presuming because file is read-only
|
||||
os.chmod(filePath, 0777)
|
||||
rmFunction(filePath)
|
||||
|
||||
def _rmtree(dirname):
|
||||
import shutil
|
||||
shutil.rmtree(dirname, 0, _rmtreeOnError)
|
||||
|
||||
|
||||
def _getAllTests(testDir):
|
||||
"""Return a list of all tests to run."""
|
||||
testPyFiles = glob.glob(os.path.join(testDir, "test_*.py"))
|
||||
modules = [f[:-3] for f in testPyFiles if f and f.endswith(".py")]
|
||||
|
||||
packages = []
|
||||
for f in glob.glob(os.path.join(testDir, "test_*")):
|
||||
if os.path.isdir(f) and "." not in f:
|
||||
if os.path.isfile(os.path.join(testDir, f, "__init__.py")):
|
||||
packages.append(f)
|
||||
|
||||
return modules + packages
|
||||
|
||||
|
||||
def _setUp():
|
||||
# Ensure the *development* check is tested.
|
||||
topDir = os.path.abspath(os.pardir)
|
||||
sys.path.insert(0, topDir)
|
||||
print "Setup to test:"
|
||||
import relic
|
||||
ver = "%s.%s.%s" % relic._version_
|
||||
print "relic %s at '%s'" % (ver, relic.__file__)
|
||||
print "-"*70 + '\n'
|
||||
|
||||
|
||||
def _tearDown():
|
||||
pass
|
||||
|
||||
|
||||
def test(testModules, testDir=os.curdir, exclude=[]):
|
||||
"""Run the given regression tests and report the results."""
|
||||
# Determine the test modules to run.
|
||||
if not testModules:
|
||||
testModules = _getAllTests(testDir)
|
||||
testModules = [t for t in testModules if t not in exclude]
|
||||
|
||||
# Aggregate the TestSuite's from each module into one big one.
|
||||
allSuites = []
|
||||
for moduleFile in testModules:
|
||||
module = __import__(moduleFile, globals(), locals(), [])
|
||||
suite = getattr(module, "suite", None)
|
||||
if suite is not None:
|
||||
allSuites.append(suite())
|
||||
else:
|
||||
if gVerbosity >= 2:
|
||||
print "WARNING: module '%s' did not have a suite() method."\
|
||||
% moduleFile
|
||||
suite = unittest.TestSuite(allSuites)
|
||||
|
||||
# Run the suite.
|
||||
runner = unittest.TextTestRunner(sys.stdout, verbosity=gVerbosity)
|
||||
result = runner.run(suite)
|
||||
|
||||
|
||||
#---- mainline
|
||||
|
||||
def main(argv):
|
||||
testDir = os.path.dirname(sys.argv[0])
|
||||
|
||||
# parse options
|
||||
global gVerbosity
|
||||
try:
|
||||
opts, testModules = getopt.getopt(sys.argv[1:], 'hvqx:cn',
|
||||
['help', 'verbose', 'quiet', 'exclude=', 'clean',
|
||||
'no-clean'])
|
||||
except getopt.error, ex:
|
||||
print "%s: ERROR: %s" % (argv[0], ex)
|
||||
print __doc__
|
||||
sys.exit(2)
|
||||
exclude = []
|
||||
setupOpts = {}
|
||||
justClean = 0
|
||||
clean = 1
|
||||
for opt, optarg in opts:
|
||||
if opt in ("-h", "--help"):
|
||||
print __doc__
|
||||
sys.exit(0)
|
||||
elif opt in ("-v", "--verbose"):
|
||||
gVerbosity += 1
|
||||
elif opt in ("-q", "--quiet"):
|
||||
gVerbosity -= 1
|
||||
elif opt in ("-x", "--exclude"):
|
||||
exclude.append(optarg)
|
||||
elif opt in ("-c", "--clean"):
|
||||
justClean = 1
|
||||
elif opt in ("-n", "--no-clean"):
|
||||
clean = 0
|
||||
|
||||
retval = None
|
||||
if not justClean:
|
||||
_setUp(**setupOpts)
|
||||
try:
|
||||
if not justClean:
|
||||
retval = test(testModules, testDir=testDir, exclude=exclude)
|
||||
finally:
|
||||
if clean:
|
||||
_tearDown(**setupOpts)
|
||||
return retval
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit( main(sys.argv) )
|
||||
|
|
@ -0,0 +1,147 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (c) 2004 Trent Mick
|
||||
|
||||
"""Test adding licenses to addlicense_inputs/... with relic.py."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
import difflib
|
||||
import pprint
|
||||
import shutil
|
||||
import StringIO
|
||||
|
||||
import testsupport
|
||||
|
||||
#---- globals
|
||||
|
||||
gInputsDir = "addlicense_inputs"
|
||||
gOutputsDir = "addlicense_outputs"
|
||||
gTmpDir = "addlicense_tmp"
|
||||
|
||||
|
||||
#----- test cases
|
||||
|
||||
class RelicInputsTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
if not os.path.exists(gTmpDir):
|
||||
os.mkdir(gTmpDir)
|
||||
|
||||
def tearDown(self):
|
||||
testsupport.rmtree(gTmpDir)
|
||||
|
||||
|
||||
def _testOneInputFile(self, fname):
|
||||
import relic
|
||||
_debug = 0 # Set to true to dump status info for each test run.
|
||||
|
||||
infile = os.path.join(gInputsDir, fname) # input
|
||||
outfile = os.path.join(gOutputsDir, fname) # expected output
|
||||
tmpfile = os.path.join(gTmpDir, fname) # actual output
|
||||
errfile = os.path.join(gOutputsDir, fname+'.error') # expected error
|
||||
# An options file is a set of kwargs for the relic.addlicense()
|
||||
# method call. One key-value pair per-line like this:
|
||||
# key=value
|
||||
# Whitespace is stripped off the value.
|
||||
optsfile = os.path.join(gInputsDir, fname+'.options') # input options
|
||||
|
||||
if _debug:
|
||||
print
|
||||
print "*"*50, "relic '%s'" % fname
|
||||
|
||||
# Determine input options to use, if any.
|
||||
opts = {}
|
||||
if os.path.exists(optsfile):
|
||||
for line in open(optsfile, 'r').read().splitlines(0):
|
||||
name, value = line.split('=', 1)
|
||||
value = value.strip()
|
||||
try: # allow value to be a type other than string
|
||||
value = eval(value)
|
||||
except Exception:
|
||||
pass
|
||||
opts[name] = value
|
||||
if _debug:
|
||||
print "*"*50, "options"
|
||||
pprint.pprint(opts)
|
||||
else:
|
||||
# If no options were specified, we presume the equivalent of the
|
||||
# command-line --defaults option.
|
||||
opts = {
|
||||
"original_code_is": "mozilla.org Code",
|
||||
"initial_copyright_date": "2001",
|
||||
"initial_developer": "Netscape Communications Corporation",
|
||||
}
|
||||
|
||||
# Copy the input file to the tmp location where relicensing is done.
|
||||
shutil.copy(infile, tmpfile)
|
||||
|
||||
# Relicense the file, capturing stdout and stderr and any possible
|
||||
# error.
|
||||
oldStdout = sys.stdout
|
||||
oldStderr = sys.stderr
|
||||
sys.stdout = StringIO.StringIO()
|
||||
sys.stderr = StringIO.StringIO()
|
||||
try:
|
||||
try:
|
||||
relic.addlicense([tmpfile], **opts)
|
||||
except relic.RelicError, ex:
|
||||
error = ex
|
||||
else:
|
||||
error = None
|
||||
finally:
|
||||
stdout = sys.stdout.getvalue()
|
||||
stderr = sys.stderr.getvalue()
|
||||
sys.stdout = oldStdout
|
||||
sys.stderr = oldStderr
|
||||
if _debug:
|
||||
print "*"*50, "stdout"
|
||||
print stdout
|
||||
print "*"*50, "stderr"
|
||||
print stderr
|
||||
print "*"*50, "error"
|
||||
print str(error)
|
||||
print "*" * 50
|
||||
|
||||
# Verify that the results are as expected.
|
||||
if os.path.exists(outfile) and error:
|
||||
self.fail("adding license '%s' raised an error but success was "
|
||||
"expected: error='%s'" % (fname, str(error)))
|
||||
elif os.path.exists(outfile):
|
||||
expected = open(outfile, 'r').readlines()
|
||||
actual = open(tmpfile, 'r').readlines()
|
||||
if expected != actual:
|
||||
diff = list(difflib.ndiff(expected, actual))
|
||||
self.fail("%r != %r:\n%s"\
|
||||
% (outfile, tmpfile, pprint.pformat(diff)))
|
||||
elif os.path.exists(errfile):
|
||||
# There is no reference output file. This means that processing
|
||||
# this file is expected to fail.
|
||||
expectedError = open(errfile, 'r').read()
|
||||
actualError = str(error)
|
||||
self.failUnlessEqual(actualError.strip(), expectedError.strip())
|
||||
else:
|
||||
self.fail("No reference ouput file or error file for '%s'." % infile)
|
||||
|
||||
# Ensure next test file gets a clean relic.
|
||||
del sys.modules['relic']
|
||||
|
||||
|
||||
#for fname in ["separated_license_comment_blocks.pl"]:
|
||||
for fname in os.listdir(gInputsDir):
|
||||
if fname.endswith(".options"): continue # skip input option files
|
||||
testFunction = lambda self, fname=fname: _testOneInputFile(self, fname)
|
||||
name = 'test_addlicense_'+fname
|
||||
setattr(RelicInputsTestCase, name, testFunction)
|
||||
|
||||
|
||||
#---- mainline
|
||||
|
||||
def suite():
|
||||
"""Return a unittest.TestSuite to be used by test.py."""
|
||||
return unittest.makeSuite(RelicInputsTestCase)
|
||||
|
||||
if __name__ == "__main__":
|
||||
runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
|
||||
result = runner.run(suite())
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (c) 2004 Trent Mick
|
||||
|
||||
"""Test relicensing of inputs/... with relic.py."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
import difflib
|
||||
import pprint
|
||||
import shutil
|
||||
import StringIO
|
||||
|
||||
import testsupport
|
||||
|
||||
#---- globals
|
||||
|
||||
gInputsDir = "relicense_inputs"
|
||||
gOutputsDir = "relicense_outputs"
|
||||
gTmpDir = "relicense_tmp"
|
||||
|
||||
|
||||
#----- test cases
|
||||
|
||||
class RelicInputsTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
if not os.path.exists(gTmpDir):
|
||||
os.mkdir(gTmpDir)
|
||||
|
||||
def tearDown(self):
|
||||
testsupport.rmtree(gTmpDir)
|
||||
|
||||
|
||||
def _testOneInputFile(self, fname):
|
||||
import relic
|
||||
_debug = 0 # Set to true to dump status info for each test run.
|
||||
|
||||
infile = os.path.join(gInputsDir, fname) # input
|
||||
outfile = os.path.join(gOutputsDir, fname) # expected output
|
||||
tmpfile = os.path.join(gTmpDir, fname) # actual output
|
||||
errfile = os.path.join(gOutputsDir, fname+'.error') # expected error
|
||||
# An options file is a set of kwargs for the relic.relicense()
|
||||
# method call. One key-value pair per-line like this:
|
||||
# key=value
|
||||
# Whitespace is stripped off the value.
|
||||
optsfile = os.path.join(gInputsDir, fname+'.options') # input options
|
||||
|
||||
if _debug:
|
||||
print
|
||||
print "*"*50, "relic '%s'" % fname
|
||||
|
||||
# Determine input options to use, if any.
|
||||
opts = {}
|
||||
if os.path.exists(optsfile):
|
||||
for line in open(optsfile, 'r').read().splitlines(0):
|
||||
name, value = line.split('=', 1)
|
||||
value = value.strip()
|
||||
try: # allow value to be a type other than string
|
||||
value = eval(value)
|
||||
except Exception:
|
||||
pass
|
||||
opts[name] = value
|
||||
if _debug:
|
||||
print "*"*50, "options"
|
||||
pprint.pprint(opts)
|
||||
|
||||
# Copy the input file to the tmp location where relicensing is done.
|
||||
shutil.copy(infile, tmpfile)
|
||||
|
||||
# Relicense the file, capturing stdout and stderr and any possible
|
||||
# error.
|
||||
oldStdout = sys.stdout
|
||||
oldStderr = sys.stderr
|
||||
sys.stdout = StringIO.StringIO()
|
||||
sys.stderr = StringIO.StringIO()
|
||||
try:
|
||||
try:
|
||||
relic.relicense([tmpfile], **opts)
|
||||
except relic.RelicError, ex:
|
||||
error = ex
|
||||
else:
|
||||
error = None
|
||||
finally:
|
||||
stdout = sys.stdout.getvalue()
|
||||
stderr = sys.stderr.getvalue()
|
||||
sys.stdout = oldStdout
|
||||
sys.stderr = oldStderr
|
||||
if _debug:
|
||||
print "*"*50, "stdout"
|
||||
print stdout
|
||||
print "*"*50, "stderr"
|
||||
print stderr
|
||||
print "*"*50, "error"
|
||||
print str(error)
|
||||
print "*" * 50
|
||||
|
||||
# Verify that the results are as expected.
|
||||
if os.path.exists(outfile) and error:
|
||||
self.fail("relicensing '%s' raised an error but success was "
|
||||
"expected: error='%s'" % (fname, str(error)))
|
||||
elif os.path.exists(outfile):
|
||||
expected = open(outfile, 'r').readlines()
|
||||
actual = open(tmpfile, 'r').readlines()
|
||||
if expected != actual:
|
||||
diff = list(difflib.ndiff(expected, actual))
|
||||
self.fail("%r != %r:\n%s"\
|
||||
% (outfile, tmpfile, pprint.pformat(diff)))
|
||||
elif os.path.exists(errfile):
|
||||
# There is no reference output file. This means that processing
|
||||
# this file is expected to fail.
|
||||
expectedError = open(errfile, 'r').read()
|
||||
actualError = str(error)
|
||||
self.failUnlessEqual(actualError.strip(), expectedError.strip())
|
||||
else:
|
||||
self.fail("No reference ouput file or error file for '%s'." % infile)
|
||||
|
||||
# Ensure next test file gets a clean relic.
|
||||
del sys.modules['relic']
|
||||
|
||||
|
||||
#for fname in ["separated_license_comment_blocks.pl"]:
|
||||
for fname in os.listdir(gInputsDir):
|
||||
if fname.endswith(".options"): continue # skip input option files
|
||||
testFunction = lambda self, fname=fname: _testOneInputFile(self, fname)
|
||||
name = 'test_relicense_'+fname
|
||||
setattr(RelicInputsTestCase, name, testFunction)
|
||||
|
||||
|
||||
#---- mainline
|
||||
|
||||
def suite():
|
||||
"""Return a unittest.TestSuite to be used by test.py."""
|
||||
return unittest.makeSuite(RelicInputsTestCase)
|
||||
|
||||
if __name__ == "__main__":
|
||||
runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
|
||||
result = runner.run(suite())
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import types
|
||||
import shutil
|
||||
|
||||
|
||||
#---- Support routines
|
||||
|
||||
def _escapeArg(arg):
|
||||
"""Escape the given command line argument for the shell."""
|
||||
#XXX There is a *lot* more that we should escape here.
|
||||
return arg.replace('"', r'\"')
|
||||
|
||||
|
||||
def _joinArgv(argv):
|
||||
r"""Join an arglist to a string appropriate for running.
|
||||
>>> import os
|
||||
>>> _joinArgv(['foo', 'bar "baz'])
|
||||
'foo "bar \\"baz"'
|
||||
"""
|
||||
cmdstr = ""
|
||||
for arg in argv:
|
||||
if ' ' in arg:
|
||||
cmdstr += '"%s"' % _escapeArg(arg)
|
||||
else:
|
||||
cmdstr += _escapeArg(arg)
|
||||
cmdstr += ' '
|
||||
if cmdstr.endswith(' '): cmdstr = cmdstr[:-1] # strip trailing space
|
||||
return cmdstr
|
||||
|
||||
|
||||
def run(argv):
|
||||
"""Prepare and run the given arg vector, 'argv', and return the
|
||||
results. Returns (<stdout lines>, <stderr lines>, <return value>).
|
||||
Note: 'argv' may also just be the command string.
|
||||
"""
|
||||
if type(argv) in (types.ListType, types.TupleType):
|
||||
cmd = _joinArgv(argv)
|
||||
else:
|
||||
cmd = argv
|
||||
if sys.platform.startswith('win'):
|
||||
i, o, e = os.popen3(cmd)
|
||||
output = o.read()
|
||||
error = e.read()
|
||||
i.close()
|
||||
e.close()
|
||||
try:
|
||||
retval = o.close()
|
||||
except IOError:
|
||||
# IOError is raised iff the spawned app returns -1. Go
|
||||
# figure.
|
||||
retval = -1
|
||||
if retval is None:
|
||||
retval = 0
|
||||
else:
|
||||
import popen2
|
||||
p = popen2.Popen3(cmd, 1)
|
||||
i, o, e = p.tochild, p.fromchild, p.childerr
|
||||
output = o.read()
|
||||
error = e.read()
|
||||
i.close()
|
||||
o.close()
|
||||
e.close()
|
||||
retval = (p.wait() & 0xFF00) >> 8
|
||||
if retval > 2**7: # 8-bit signed 1's-complement conversion
|
||||
retval -= 2**8
|
||||
return output, error, retval
|
||||
|
||||
|
||||
def _rmtreeOnError(rmFunction, filePath, excInfo):
|
||||
if excInfo[0] == OSError:
|
||||
# presuming because file is read-only
|
||||
os.chmod(filePath, 0777)
|
||||
rmFunction(filePath)
|
||||
|
||||
def rmtree(dirname):
|
||||
import shutil
|
||||
shutil.rmtree(dirname, 0, _rmtreeOnError)
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче