Grail(TM) is a web browser written in Python

Overview
GRAIL 0.6
=========

Grail(TM) is a web browser written in Python, an object-oriented
scripting language.  Grail is distributed in source form.  It requires
that you have a Python interpreter and a Tcl/Tk installation, with the
Python interpreter configured for Tcl/Tk support.

In this file:

	- Licensing issues
	- Future development
	- Hardware requirements
	- Installation
	- Using Grail
	- Web resources
	- Feedback
	- Epilogue


Licensing issues
----------------

The license of Grail allows essentially unrestricted use and
redistribution.  The full text of the license can be found in the file
LICENSE in this directory.  The sources are Copyright (c) CNRI
1996-1999.  Grail is a registered trademark of CNRI.


Future development
------------------

Given the low usage of Grail, CNRI cannot allocate further resources
to this project.  The license allows for derivative projects, so
anyone who has a need for a Python-based or easily modified Internet
browser is free to use the Grail source code as a basis for a new
project.

The Grail development team would be happy to provide anyone seriously
interested in using Grail as the basis for a new project with a copy
of the CVS repository.  We are also able to provide pointers from the 
Grail Web site to any new projects that spring up based on Grail.


Hardware requirements
---------------------

Grail runs on most Unix systems, on Windows NT and 95, and on
Macintosh systems, provided you have enough memory and a fast enough
machine.  (For Windows, 32 Meg RAM and 90 MHz Pentium is a reasonable
minimal configuration.  For Macintosh, a 40 MHz 68k or any PPC, with
24 Meg RAM, is acceptable.)


Installation
------------

There are three steps to take before you can use Grail:

- Install Tcl and Tk.  The versions must be compatible with each other
and with the Python version you are installing in the next step;
currently, the oldest Tcl/Tk version supported is 8.0.  You can get
Tcl/Tk it at http://www.scriptics.com/; or try ftp to ftp.sunlabs.com
in directory /pub/tcl/.

- Install Python 1.5 (or newer if available), configured for use with
Tk.  The URL to get Python is http://www.python.org/; or try ftp to
ftp.python.org in directory /pub/python/src/.  You must enable Tk
support by editing the file Modules/Setup; see the comments in that
file (search for "tkinter") and the main README that comes with Python.

- Install the Grail sources in a convenient place.  Grail is executed
directly from its source directory.  If you are using the /usr/local
hierarchy, the Grail sources could be installed in
/usr/local/lib/grail/.

You can also choose to leave grail.py unchanged and have a shell
script named "grail" which execs the Python interpreter, e.g.:

    exec python /usr/local/lib/grail/grail.py ${1+"[email protected]"}

(On Windows or Macintosh systems, the best thing to do is to create a
shortcut or alias to the file grail.py on the desktop.)


Using Grail
-----------

If the first line of the grail.py script points to a working Python
interpreter with Tk support, you should be able to start Grail by
executing "./grail.py" in the Grail source directory.  Grail figures
out where the source directory is by inspecting sys.argv[0], so in
fact typing the pathname to the script from anywhere should work.

Command line options:

The "-g " option lets you specify an initial geometry for
the first browser window in the standard X11 geometry form:
[x][++], where all dimensions are measured in
pixels.  It is also possible to set the width and height (in character
units) through the General preference panel.

The "-i" option inhibits loading of images for this session.
This option can also be set via the General preference panel.

The "-d " option lets you override the $DISPLAY environment
variable.

Advanced users with a grailrc.py file can use "-q" to inhibit
processing of grailrc.py.  This may be useful during debugging.

Command line arguments:

The only positional command line argument is an optional URL of a page
to display initially.  This does not become your "home page"; use the
General preference panel to change the page loaded by the Home command
in the Go menu, and to choose whether this page should be loaded
initially if no URL is given on the command line.


Web resources
-------------

More information on using Grail can be found through the Grail home
page, at this URL:

    http://grail.cnri.reston.va.us/grail/

This page is also accessible through the "Grail Home Page" item of the
Help menu.


Feedback
--------

Grail 0.6 is the last version of Grail to be released by CNRI.  If a
new project based on Grail appears, we will be glad to point to it
from the Grail Web site, but we are not prepared to respond to bug
reports.

Refer to the Grail Web site to determine if any derived projects have
been started.


Epilogue
--------

"Everything should be made as simple as possible, but no simpler."
	--Albert Einstein

"Nothing is as simple as we hope it will be."
	--Jim Horning

"Simple is as simple does."
	--Forrest Gump
Comments
  • Replace usages of

    Replace usages of "string" module

    I was taking a look to see if I could help and it became clear there are several transformations that need to be applied across the whole code base before being able to work on individual files.

    The first thing I notice compared to Python 3 is the "string" module which appears to refer to a module that was available in Python 1 and 2 but not in 3: https://docs.python.org/release/1.4/lib/node49.html

    Doing a naive search through the code bade I found the following methods exceptions being used and I've listed their replacements:

    string.capitalize -> str.capitalize 
    string.capwords -> str.title
    string.splitfields -> str.split
    string.upper -> str.upper
    string.lstrip -> str.lstrip
    string.replace -> str.replace
    string.joinfields -> str.join
    string.atol -> int
    string.rfind -> str.rfind
    string.lower -> str.lower
    string.whitespace -> string.whitespace
    string.split -> str.split
    string.atoi -> int
    string.digits -> string.digits
    string.maketrans -> str.maketrans
    string.rstrip -> str.rstrip
    string.index -> str.index
    string.atof -> float
    string.strip -> str.strip
    string.translate -> str.translate
    string.find -> str.find
    string.join -> str.join
    

    I also found the following exceptions which all look like they can be replaced with ValueError:

    string.atof_error
    string.atoi_error
    string.atol_error
    

    I am preparing a PR with the following steps:

    1. Find any case where a name is bound to the built-in str, and change the name to str_
    2. Replace the above methods
    3. Replace the above exceptions

    I plan to automate the bulk of the replacements and I don't have any test cases to prove it's the correct approach as the code base itself does not run. So let me know if there's any preferred other way you think this should be approached.

    opened by notatallshaw 14
  • What is this At ?

    What is this At ?

    I am changing the files according to Python 3 and this At appears many times ? What is this At ? Is it a class(I'm guessing because of naming convention rule) or is it function(less chance I think) ? And what is the alternative for this in Python 3 ?

    opened by PrakharPythonProgrammer 8
  • Convert to Python 3?

    Convert to Python 3?

    Do you want to run this using Python 2 or 3?

    If it is to have a future it should probably use Python 3, but given that it was written for Python 1, it would be simpler to start out with Python 2.

    If you stick to Python 2 you won’t have to deal with converting print statement to calls and other 2to3 stuff. Plus if you find it is hopeless you will have wasted less time... :-)

    opened by gvanrossum 7
  • Please replace 'import re as re' with just 'import re'

    Please replace 'import re as re' with just 'import re'

    I saw that you're changing all regex occurences to re, which is a good idea. But you've overcomplicated the import by writing

    import re as re
    

    This can just be

    import re
    
    opened by gvanrossum 6
  • rfc822 module not found shall we use plone.rfc822 or email module ?

    rfc822 module not found shall we use plone.rfc822 or email module ?

    There is no module like rfc822 in python 3. It was removed in python 3. So now I want to ask which alternative shall we use because I don't have much experience with these two modules. There is email module and plone.rfc822 module. I think plone.rfc822 will be similar to rfc822 so we don't need to change much. What is your opinion ?

    Sincerely Prakhar

    opened by PrakharPythonProgrammer 5
  • UndefinedStyle

    UndefinedStyle

    I have searched on internet and as far as my knowledge there is no exception like UndefinedStyle. Can you tell @gvanrossum what kind of error did you want it to handle ? Maybe the name for that exception is changed.

    opened by PrakharPythonProgrammer 4
  • Keep using tkinter or try some other module ?

    Keep using tkinter or try some other module ?

    I was thinking about whether we should keep going with tkinter or change the module. After researching about it on internet I have come to the conclusion that PyQt5 module is better than tkinter. This module provides a tool QtDesigner which will help us in building the GUI for our app. Of course if we start with a new module we'll have to start everything from scratch. All the tkinter code will be useless. I want your opinion on it sir. Should we go with tkinter or try some other module like PyQt5.

    opened by PrakharPythonProgrammer 4
  • Remove unnecessary code

    Remove unnecessary code

    def more_complete_challenge_parse(self):        
            return
    
            challenge = headers['www-authenticate']
            # <authscheme> realm="<value>" [, <param>="<value>"] ...
            parts = string.splitfields(challenge, ',')
            p = parts[0]
            i = string.find(p, '=')
            if i < 0: return
            key, value = p[:i], p[i+1:]
            keyparts = string.split(string.lower(key))
            if not(len(keyparts) == 2 and keyparts[1] == 'realm'): return
            authscheme = keyparts[0]
            value = string.strip(value)
            if len(value) >= 2 and value[0] == value[-1] and value[0] in '\'"':
                value = value[1:-1]
    

    In this code why did we do all this if we just wanted to return nothing. The code below return won't get executed so why did we write all this code. What is the purpose of it @gvanrossum ?

    opened by PrakharPythonProgrammer 2
  • Some files seem to be missing

    Some files seem to be missing

    I haven't checked each and every folder so I don't know the total number but some files seem to be missing like grail.py Why did you delete those @vadmium ?

    opened by PrakharPythonProgrammer 2
  • I want to help

    I want to help

    Hi Everyone.,My name is Niyant. I am here to help you for updating of browser.... I hope I can give my best... I am person of brain storming ideas and I have experience of begginer in python... So I hope you don't mind it and helping each other here will be key feature of here... And believe me I can give you so woowwwww!!!!! Ideas that you have never thought or ever imagined.... I am ending with this for a new start of new Journey.... And I am thankful to GVR sir and originator PPP..... Thank you for understanding me and feeling I am useful too you

    opened by Niyant1 1
  • ImportError: cannot import name 'tktools' from 'utils' (unknown location)

    ImportError: cannot import name 'tktools' from 'utils' (unknown location)

    Problem: While running python3 grail.py an error occurs ImportError: cannot import name 'tktools' from 'utils' (unknown location)

    Notes: tkinter was installed using sudo apt install python3-tk utils installed using pip3 install python3-utils

    Specs: Python 3.9.5 PIP 20.3.4 Ubuntu 21.04 Kernel 5.11.0-31-generic

    opened by WMRamadan 0
  • regex.compile translate parameter problem

    regex.compile translate parameter problem

    In the Reader.py file(also in some other files) there was one place where instead of regex.compile I wrote re.compile now the problem is that regex.compile took translate parameter which was an optional parameter. This parameter translated the string and the pattern before comparing the string with the pattern. I have come up with one solution. I'll convert the pattern and the string into casefolded strings beforehand and then use the compile function and this time I'll not have to mention that translate parameter. Meanwhile if anyone knows any alternate function for regex.compile which works in Python 3 then please inform me and I'll use that.

    opened by PrakharPythonProgrammer 0
  • Automatic suggestions while searching

    Automatic suggestions while searching

    Hi Everyone Good Evening PPP

    I got one more idea if we can use public search history which they are searching and we can put that also if public doesn't like or want to change quote panel with their search and Trending searches.....

    I hope you will like my idea....

    opened by Niyant1 2
  • Add some motivational quotes in the browser ?

    Add some motivational quotes in the browser ?

    Hi Everyone Good Evening PPP Originator.... I came up with idea that we can put motivational quotes while in free time they can have motivation...and we will update these quotes every time whenever he/she opens it.... So I hope u liked my idea...

    opened by Niyant1 1
  • Answers to questions like: What are the goals of this project ? Which specific version are we targeting ? etc.

    Answers to questions like: What are the goals of this project ? Which specific version are we targeting ? etc.

    1. We are targeting the latest Python which is Python 3.9
    2. This project is trying port Grail from Python 1 to Python 3.9
    3. After the implementation is done we want to improve this browser to add more functions and make it user-friendly
    4. In future, we might also make an incognito like tab inside this browser

    Current Status Currently we are trying to make an implementation of the existing code into Python 3.9

    If you have any question which I wasn't able to answer feel free to ask that question inside this issue.

    opened by PrakharPythonProgrammer 0
Owner
null
Hexa is an advanced browser.It can carry out all the functions present in a browser.

Hexa is an advanced browser.It can carry out all the functions present in a browser.It is coded in the language Python using the modules PyQt5 and sys mainly.It is gonna get developed more in the future.It is made specially for the students.Only 1 tab can be used while using it so that the students cant missuse the pandemic situation :)

null 1 Dec 10, 2021
Integration between the awesome window manager and the firefox web browser.

Integration between the awesome window manager and the firefox web browser.

contribuewwt 3 Feb 2, 2022
Simple Python Gemini browser with nice formatting

gg I wasn't satisfied with any of the other available Gemini clients, so I wrote my own. Requires Python 3.9 (maybe older, I haven't checked) and opti

Sarah Taube 2 Nov 21, 2021
Open source tools to allow working with ESP devices in the browser

ESP Web Tools Allow flashing ESPHome or other ESP-based firmwares via the browser. Will automatically detect the board type and select a supported fir

ESPHome 173 Sep 24, 2022
Yandex Media Browser

Браузер медиа для плагина Yandex Station Включайте музыку, плейлисты и радио на Яндекс.Станции из Home Assistant! Скриншот Корневой раздел: Библиотека

Alexander Ryazanov 30 Aug 30, 2022
A script that will warn you, by opening a new browser tab, when there are new content in your favourite websites.

web check A script that will warn you, by opening a new browser tab, when there are new content in your favourite websites. What it does The script wi

Jaime Álvarez 52 Mar 15, 2022
A browser login credentials thief for windows and Linux

Thief ???? A browser login credentials thief for windows and Linux Python script to decrypt login credentials from browsers in windows or linux Decryp

Ash 1 Dec 13, 2021
Batch generate asset browser previews

When dealing with hundreds of library files it becomes tedious to mark their contents as assets. Using python to automate the process is a perfect fit

null 40 Sep 27, 2022
KeyBrowser: A program launches a browser and a keylogger at the same time, is used to retrieve a person's personal information

KeyBrowser: A program launches a browser and a keylogger at the same time, is used to retrieve a person's personal information

null 2 Jun 28, 2022
Reactjs web app written entirely in python, using transcrypt compiler.

Reactjs web app written entirely in python, using transcrypt compiler.

Dan Shai 22 Dec 11, 2021
Sabe is a python framework written for easy web server setup.

Sabe is a python framework written for easy web server setup. Sabe, kolay web sunucusu kurulumu için yazılmış bir python çerçevesidir. Öğrenmesi kola

null 2 Jan 1, 2022
A web app that is written entirely in Python

University Project About I made this web app to finish a project assigned by my teacher. It is written entirely in Python, thanks to streamlit to make

null 13 Sep 15, 2022
PyDy, short for Python Dynamics, is a tool kit written in the Python

PyDy, short for Python Dynamics, is a tool kit written in the Python programming language that utilizes an array of scientific programs to enable the study of multibody dynamics. The goal is to have a modular framework and eventually a physics abstraction layer which utilizes a variety of backends that can provide the user with their desired workflow

PyDy 300 Sep 27, 2022
Msgpack serialization/deserialization library for Python, written in Rust using PyO3 and rust-msgpack. Reboot of orjson. msgpack.org[Python]

ormsgpack ormsgpack is a fast msgpack library for Python. It is a fork/reboot of orjson It serializes faster than msgpack-python and deserializes a bi

Aviram Hassan 110 Sep 19, 2022
Synthetik Python Mod - A save editor tool for the game Synthetik written in python

Synthetik_Python_Mod A save editor tool for the game Synthetik written in python

null 2 Sep 10, 2022
MiniJVM is simple java virtual machine written by python language, it can load class file from file system and run it.

MiniJVM MiniJVM是一款使用python编写的简易JVM,能够从本地加载class文件并且执行绝大多数指令。 支持的功能 1.从本地磁盘加载class并解析 2.支持绝大多数指令集的执行 3.支持虚拟机内存分区以及对象的创建 4.支持方法的调用和参数传递 5.支持静态代码块的初始化 不支

keguoyu 60 Apr 1, 2022
Pygments is a generic syntax highlighter written in Python

Welcome to Pygments This is the source of Pygments. It is a generic syntax highlighter written in Python that supports over 500 languages and text for

null 1.1k Oct 1, 2022
Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything.

Retrying Retrying is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just

Ray Holder 1.8k Sep 20, 2022