import gadfly def test(): cur.execute('select * from plantsdb order by p_name') for field in cur.description: print 'field:', field rows = cur.fetchall() for row in rows: for idx, field in enumerate(row): content = '%s: "%s"' % (cur.description[idx][0], field, ) print content, print connection.close() test()
Notes:
The solutions using sqlite3 are very similar to those using gadfly. For information on sqlite3, see: sqlite3 — DB-API 2.0 interface for SQLite databases http://docs.python.org/library/sqlite3.html#module-sqlite3.
#!/usr/bin/env python """ Perform operations on sqlite3 (plants) database. Usage: python py_db_api.py command [arg1, ... ] Commands: create -- create new database. show -- show contents of database. add -- add row to database. Requires 3 args (name, descrip, rating). delete - remove row from database. Requires 1 arg (name). Examples: python test1.py create python test1.py show python test1.py add crenshaw "The most succulent melon" 10 python test1.py delete lemon """ import sys import sqlite3 Values = [ ('lemon', 'bright and yellow', '7'), ('peach', 'succulent', '9'), ('banana', 'smooth and creamy', '8'), ('nectarine', 'tangy and tasty', '9'), ('orange', 'sweet and tangy', '8'), ] Field_defs = [ 'p_name varchar', 'p_descrip varchar', #'p_rating integer', 'p_rating varchar', ] def createdb(): connection = sqlite3.connect('sqlite3plantsdb') cursor = connection.cursor() q1 = "create table plantsdb (%s)" % (', '.join(Field_defs)) print 'create q1: %s' % q1 cursor.execute(q1) q1 = "create index index1 on plantsdb(p_name)" cursor.execute(q1) q1 = "insert into plantsdb (p_name, p_descrip, p_rating) values ('%s', '%s', %s)" for spec in Values: q2 = q1 % spec print 'q2: "%s"' % q2 cursor.execute(q2) connection.commit() showdb1(cursor) connection.close() def showdb(): connection, cursor = opendb() showdb1(cursor) connection.close() def showdb1(cursor): cursor.execute("select * from plantsdb order by p_name") hr() description = cursor.description print description print 'description:' for rowdescription in description: print ' %s' % (rowdescription, ) hr() rows = cursor.fetchall() print rows print 'rows:' for row in rows: print ' %s' % (row, ) hr() print 'content:' for row in rows: descrip = row[1] name = row[0] rating = '%s' % row[2] print ' %s%s%s' % ( name.ljust(12), descrip.ljust(30), rating.rjust(4), ) def addtodb(name, descrip, rating): try: rating = int(rating) except ValueError, exp: print 'Error: rating must be integer.' return connection, cursor = opendb() cursor.execute("select * from plantsdb where p_name = '%s'" % name) rows = cursor.fetchall() if len(rows) > 0: ql = "update plantsdb set p_descrip='%s', p_rating='%s' where p_name='%s'" % ( descrip, rating, name, ) print 'ql:', ql cursor.execute(ql) connection.commit() print 'Updated' else: cursor.execute("insert into plantsdb values ('%s', '%s', '%s')" % ( name, descrip, rating)) connection.commit() print 'Added' showdb1(cursor) connection.close() def deletefromdb(name): connection, cursor = opendb() cursor.execute("select * from plantsdb where p_name = '%s'" % name) rows = cursor.fetchall() if len(rows) > 0: cursor.execute("delete from plantsdb where p_name='%s'" % name) connection.commit() print 'Plant (%s) deleted.' % name else: print 'Plant (%s) does not exist.' % name showdb1(cursor) connection.close() def opendb(): connection = sqlite3.connect("sqlite3plantsdb") cursor = connection.cursor() return connection, cursor def hr(): print '-' * 60 def usage(): print __doc__ sys.exit(1) def main(): args = sys.argv[1:] if len(args) < 1: usage() cmd = args[0] if cmd == 'create': if len(args) != 1: usage() createdb() elif cmd == 'show': if len(args) != 1: usage() showdb() elif cmd == 'add': if len(args) < 4: usage() name = args[1] descrip = args[2] rating = args[3] addtodb(name, descrip, rating) elif cmd == 'delete': if len(args) < 2: usage() name = args[1] deletefromdb(name) else: usage() if __name__ == '__main__': main()
There is support for parsing and generating CSV files in the Python standard library. See: csv — CSV File Reading and Writing http://docs.python.org/library/csv.html#module-csv.
Exercises:
Read a CSV file and print the fields in columns. Here is a sample file to use as input:
# name description rating Lemon,Bright yellow and tart,5 Eggplant,Purple and shiny,6 Tangerine,Succulent,8
Solutions:
Use the CSV module in the Python standard library to read a CSV file:
""" Read a CSV file and print the contents in columns. """ import csv def test(infilename): infile = open(infilename) reader = csv.reader(infile) print '==== =========== ======' print 'Name Description Rating' print '==== =========== ======' for fields in reader: if len(fields) == 3: line = '%s %s %s' % (fields[0].ljust(20), fields[1].ljust(40), fields[2].ljust(4)) print line infile.close() def main(): infilename = 'csv_report.csv' test(infilename) if __name__ == '__main__': main()
And, when run, here is what it displays:
==== =========== ====== Name Description Rating ==== =========== ====== Lemon Bright yellow and tart 5 Eggplant Purple and shiny 6 Tangerine Succulent 8
YAML is a structured text data representation format. It uses indentation to indicate nesting. Here is a description from the YAML Web site:
"YAML: YAML Ain't Markup Language
"What It Is: YAML is a human friendly data serialization standard for all programming languages."
You can learn more about YAML and PyYAML here:
Exercises:
Read the following sample YAML document. Print out the information in it:
american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves
Load the YAML data used in the previous exercise, then make a modification (for example, add "San Francisco Giants" to the National League), then dump the modified data to a new file.
Solutions:
Printing out information from YAML is as "simple" as printing out a Python data structure. In this solution, we use the pretty printer from the Python standard library:
import yaml import pprint def test(): infile = open('test1.yaml') data = yaml.load(infile) infile.close() pprint.pprint(data) test()
We could, alternatively, read in and then "load" from a string:
import yaml import pprint def test(): infile = open('test1.yaml') data_str = infile.read() infile.close() data = yaml.load(data_str) pprint.pprint(data) test()
The YAML dump() function enables us to dump data to a file:
import yaml import pprint def test(): infile = open('test1.yaml', 'r') data = yaml.load(infile) infile.close() data['national'].append('San Francisco Giants') outfile = open('test1_new.yaml', 'w') yaml.dump(data, outfile) outfile.close() test()
Notes:
If we want to produce the standard YAML "block" style rather than the "flow" format, then we could use:
yaml.dump(data, outfile, default_flow_style=False)
Here is a quote from Wikipedia entry for Json:
"JSON (pronounced 'Jason'), short for JavaScript Object Notation, is a lightweight computer data interchange format. It is a text-based, human-readable format for representing simple data structures and associative arrays (called objects)."
The Json text representation looks very similar to Python literal representation of Python builtin data types (for example, lists, dictionaries, numbers, and strings).
Learn more about Json and Python support for Json here:
Excercises:
Write a Python script, using your favorite Python Json implementation (for example python-json or simplejson), that dumps the following data structure to a file:
Data = { 'rock and roll': ['Elis', 'The Beatles', 'The Rolling Stones',], 'country': ['Willie Nelson', 'Hank Williams', ] }
Write a Python script that reads Json data from a file and loads it into Python data structures.
Solutions:
This solution uses simplejson to store a Python data structure encoded as Json in a file:
import simplejson as json Data = { 'rock and roll': ['Elis', 'The Beatles', 'The Rolling Stones',], 'country': ['Willie Nelson', 'Hank Williams', ] } def test(): fout = open('tmpdata.json', 'w') content = json.dumps(Data) fout.write(content) fout.write('\n') fout.close() test()
We can read the file into a string, then decode it from Json:
import simplejson as json def test(): fin = open('tmpdata.json', 'r') content = fin.read() fin.close() data = json.loads(content) print data test()
Note that you may want some control over indentation, character encoding, etc. For simplejson, you can learn about that here: simplejson - JSON encoder and decoder -- http://simplejson.googlecode.com/svn/tags/simplejson-2.0.1/docs/index.html.
This section discusses a specific Python tool, specifically a Python code generator that generates Python bindings for XML files.
Thus, this section will help you in the following ways:
Additional information:
If you plan to work through this tutorial, you may find it helpful to look at the sample code that accompanies this tutorial. You can find it in the distribution under:
tutorial/ tutorial/Code/
You can find additional information about generateDS.py here:
That documentation is also included in the distribution.
generateDS.py generates Python data structures (for example, class definitions) from an XML schema document. These data structures represent the elements in an XML document described by the XML schema. generateDS.py also generates parsers that load an XML document into those data structures. In addition, a separate file containing subclasses (stubs) is optionally generated. The user can add methods to the subclasses in order to process the contents of an XML document.
The generated Python code contains:
Each generated class contains the following:
The generated subclass file contains one (sub-)class definition for each data representation class. If the subclass file is used, then the parser creates instances of the subclasses (instead of creating instances of the superclasses). This enables the user to extend the subclasses with "tree walk" methods, for example, that process the contents of the XML file. The user can also generate and extend multiple subclass files which use a single, common superclass file, thus implementing a number of different processes on the same XML document type.
This document introduces the user to generateDS.py and walks the user through several examples that show how to generate Python code and how to use that generated code.
Note: The sample files used below are under the tutorial/Code/ directory.
Use the following to get help:
$ generateDS.py --help
I'll assume that generateDS.py is in a directory on your path. If not, you should do whatever is necessary to make it accessible and executable.
Here is a simple XML schema document:
And, here is how you might generate classes and subclasses that provide data bindings (a Python API) for the definitions in that schema:
$ generateDS.py -o people_api.py -s people_sub.py people.xsd
And, if you want to automatically over-write the generated Python files, use the -f command line flag to force over-write without asking:
$ generateDS.py -f -o people_api.py -s people_sub.py people.xsd
And, to hard-wire the subclass file so that it imports the API module, use the --super command line file. Example:
$ generateDS.py -o people_api.py people.xsd $ generateDS.py -s people_appl1.py --super=people_api people.xsd
Or, do both at the same time with the following:
$ generateDS.py -o people_api.py -s people_appl1.py --super=people_api people.xsd
And, for your second application:
$ generateDS.py -s people_appl2.py --super=people_api people.xsd
If you take a look inside these two "application" files, you will see and import statement like the following:
import ??? as supermod
If you had not used the --super command line option when generating the "application" files, then you could modify that statement yourself. The --super command line option does this for you.
You can also use the The graphical front-end to configure options and save them in a session file, then use that session file with generateDS.py to specify your command line options. For example:
$ generateDS.py --session=test01.session
You can test the generated code by running it. Try something like the following:
$ python people_api.py people.xml
or:
$ python people_appl1.py people.xml
Why does this work? Why can we run the generated code as a Python script? -- If you look at the generated code, down near the end of the file you'll find a main() function that calls a function named parse(). The parse function does the following:
Except for some indentation (ignorable whitespace), this exported XML should be the same as the original XML document. So, that gives you a reasonably thorough test of your generated code.
And, the code in that parse() function gives you a hint of how you might build your own application-specific code that uses the generated API (those generated Python classes).
Now that you have generated code for your data model, you can test it by running it as an application. Suppose that you have an XML instance document people1.xml that satisfies your schema. Then you can parse that instance document and export it (print it out) with something like the following:
$ python people_api.py people1.xml
And, if you have used the --super command line option, as I have above, to connect your subclass file with the superclass (API) file, then you could use the following to do the same thing:
$ python people_appl1.py people1.xml
You may want to merely skim this section for now, then later refer back to it when some of these options are are used later in this tutorial. Also, remember that you can get information about more command line options used by generateDS.py by typing:
$ python generateDS.py --help
and by reading the document http://www.rexx.com/~dkuhlman/generateDS.html
Use this option to tell generateDS.py which of the elements defined in your XM schema is the "root" element. The root element is the outer-most (top-level) element in XML instance documents defined by this schema. In effect, this tells your generated modules which element to use as the root element when parsing and exporting documents.
generateDS.py attempts to guess the root element, usually the first element defined in your XML schema. Use this option when that default is not what you want.
There is also a point-and-click way to run generateDS. It enables you to specify the options needed by generateDS.py through a graphical interface, then to run generateDS.py with those options. It also
You can run it, if you have installed generateDS, by typing the following at a command line:
$ generateds_gui.py
After configuring options, you can save those options in a "session" file, which can be loaded later. Look under the File menu for save and load commands and also consider using the "--session" command line option.
Also note that generateDS.py itself supports a "--session" command line option that enables you to run generateDS.py with the options that you specified and saved with the graphical front-end.
generateDS.py generates Python code which, with no modification, will parse and then export an XML document defined by your schema. However, you are likely to want to go beyond that. In many situations you will want to construct a custom application that processes your XML documents using the generated code.
One strategy is to generate a subclass file and to add your application-specific code to that. Generate the subclass file with the "-s" command line flag:
$ generateDS.py -s myapp.py people.xsd
Now add some application-specific code to myapp.py, for example, if you are using the included "people" sample files:
class peopleTypeSub(supermod.people): def __init__(self, comments=None, person=None, programmer=None, python_programmer=None, java_programmer=None): supermod.people.__init__(self, comments, person, programmer, python_programmer, java_programmer) def fancyexport(self, outfile): outfile.write('Starting fancy export') for person in self.get_person(): person.fancyexport(outfile) supermod.people.subclass = peopleTypeSub # end class peopleTypeSub class personTypeSub(supermod.person): def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None): supermod.person.__init__(self, vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description) def fancyexport(self, outfile): outfile.write('Fancy person export -- name: %s' % self.get_name(), ) supermod.person.subclass = personTypeSub # end class personTypeSub
In this approach you might do things like the following:
Get to know the generated export API by inspecting the generated code in the superclass file. That's the file generated with the "-o" command line flag.
What to look for:
Now, you can import your generated API module, and use it to construct and manipulate objects. Here is an example using code generated with the "people" schema:
import sys import people_api as api def test(names): people = api.peopleType() for count, name in enumerate(names): id = '%d' % (count + 1, ) person = api.personType(name=name, id=id) people.add_person(person) people.export(sys.stdout, 0) test(['albert', 'betsy', 'charlie'])
Run this and you might see something like the following:
$ python tmp.py <people > <person id="1"> <name>albert</name> </person> <person id="2"> <name>betsy</name> </person> <person id="3"> <name>charlie</name> </person> </people>
Note: You can find examples of the code in this section in these files:
tutorial/Code/upcase_names.py tutorial/Code/upcase_names_appl.py
Here are the relevant, modified subclasses (upcase_names_appl.py):
import people_api as supermod class peopleTypeSub(supermod.peopleType): def __init__(self, comments=None, person=None, specialperson=None, programmer=None, python_programmer=None, java_programmer=None): super(peopleTypeSub, self).__init__(comments, person, specialperson, programmer, python_programmer, java_programmer, ) def upcase_names(self): for person in self.get_person(): person.upcase_names() supermod.peopleType.subclass = peopleTypeSub # end class peopleTypeSub class personTypeSub(supermod.personType): def __init__(self, vegetable=None, fruit=None, ratio=None, id=None, value=None, name=None, interest=None, category=None, agent=None, promoter=None, description=None, range_=None, extensiontype_=None): super(personTypeSub, self).__init__(vegetable, fruit, ratio, id, value, name, interest, category, agent, promoter, description, range_, extensiontype_, ) def upcase_names(self): self.set_name(self.get_name().upper()) supermod.personType.subclass = personTypeSub # end class personTypeSub
Notes:
Here is the application itself (upcase_names.py):
import sys import upcase_names_appl as appl def create_people(names): people = appl.peopleTypeSub() for count, name in enumerate(names): id = '%d' % (count + 1, ) person = appl.personTypeSub(name=name, id=id) people.add_person(person) return people def main(): names = ['albert', 'betsy', 'charlie'] people = create_people(names) print 'Before:' people.export(sys.stdout, 1) people.upcase_names() print '-' * 50 print 'After:' people.export(sys.stdout, 1) main()
Notes:
And, when you run this mini-application, here is what you might see:
$ python upcase_names.py Before: <people > <person id="1"> <name>albert</name> </person> <person id="2"> <name>betsy</name> </person> <person id="3"> <name>charlie</name> </person> </people> -------------------------------------------------- After: <people > <person id="1"> <name>ALBERT</name> </person> <person id="2"> <name>BETSY</name> </person> <person id="3"> <name>CHARLIE</name> </person> </people>
There are times when you would like to implement a function or method that can perform operations on a variety of members and that needs type information about each member.
You can get help with this by generating your code with the "--member-specs" command line option. When you use this option, generateDS.py add a list or a dictionary containing an item for each member. If you want a list, then use "--member-specs=list", and if you want a dictionary, with member names as keys, then use "--member-specs=dict".
Here is an example -- In this example, we walk the document/instance tree and convert all string simple types to upper case.
Here is a schema (Code/member_specs.xsd):
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="contact-list" type="contactlistType" /> <xs:complexType name="contactlistType"> <xs:sequence> <xs:element name="description" type="xs:string" /> <xs:element name="contact" type="contactType" maxOccurs="unbounded" /> </xs:sequence> <xs:attribute name="locator" type="xs:string" /> </xs:complexType> <xs:complexType name="contactType"> <xs:sequence> <xs:element name="first-name" type="xs:string"/> <xs:element name="last-name" type="xs:string"/> <xs:element name="interest" type="xs:string" maxOccurs="unbounded" /> <xs:element name="category" type="xs:integer"/> </xs:sequence> <xs:attribute name="id" type="xs:integer" /> <xs:attribute name="priority" type="xs:float" /> <xs:attribute name="color-code" type="xs:string" /> </xs:complexType> </xs:schema>
We generate code with the following command line:
$ generateDS.py -f \ -o member_specs_api.py \ -s member_specs_upper.py \ --super=member_specs_api \ --member-specs=list \ member_specs.xsd
Notes:
And, here is the subclass file (member_specs_upper.py, generated with the "-s" command line option), to which we have added a bit of code that converts any string-type members to upper case. You can think of this module as a special "application" of the generated classes.
#!/usr/bin/env python # # member_specs_upper.py # # # Generated Tue Nov 9 15:54:47 2010 by generateDS.py version 2.2a. # import sys import member_specs_api as supermod etree_ = None Verbose_import_ = False ( XMLParser_import_none, XMLParser_import_lxml, XMLParser_import_elementtree ) = range(3) XMLParser_import_library = None try: # lxml from lxml import etree as etree_ XMLParser_import_library = XMLParser_import_lxml if Verbose_import_: print("running with lxml.etree") except ImportError: try: # cElementTree from Python 2.5+ import xml.etree.cElementTree as etree_ XMLParser_import_library = XMLParser_import_elementtree if Verbose_import_: print("running with cElementTree on Python 2.5+") except ImportError: try: # ElementTree from Python 2.5+ import xml.etree.ElementTree as etree_ XMLParser_import_library = XMLParser_import_elementtree if Verbose_import_: print("running with ElementTree on Python 2.5+") except ImportError: try: # normal cElementTree install import cElementTree as etree_ XMLParser_import_library = XMLParser_import_elementtree if Verbose_import_: print("running with cElementTree") except ImportError: try: # normal ElementTree install import elementtree.ElementTree as etree_ XMLParser_import_library = XMLParser_import_elementtree if Verbose_import_: print("running with ElementTree") except ImportError: raise ImportError("Failed to import ElementTree from any known place") def parsexml_(*args, **kwargs): if (XMLParser_import_library == XMLParser_import_lxml and 'parser' not in kwargs): # Use the lxml ElementTree compatible parser so that, e.g., # we ignore comments. kwargs['parser'] = etree_.ETCompatXMLParser() doc = etree_.parse(*args, **kwargs) return doc # # Globals # ExternalEncoding = 'ascii' # # Utility funtions needed in each generated class. # def upper_elements(obj): for item in obj.member_data_items_: if item.get_data_type() == 'xs:string': name = remap(item.get_name()) val1 = getattr(obj, name) if isinstance(val1, list): for idx, val2 in enumerate(val1): val1[idx] = val2.upper() else: setattr(obj, name, val1.upper()) def remap(name): newname = name.replace('-', '_') return newname # # Data representation classes # class contactlistTypeSub(supermod.contactlistType): def __init__(self, locator=None, description=None, contact=None): super(contactlistTypeSub, self).__init__(locator, description, contact, ) def upper(self): upper_elements(self) for child in self.get_contact(): child.upper() supermod.contactlistType.subclass = contactlistTypeSub # end class contactlistTypeSub class contactTypeSub(supermod.contactType): def __init__(self, priority=None, color_code=None, id=None, first_name=None, last_name=None, interest=None, category=None): super(contactTypeSub, self).__init__(priority, color_code, id, first_name, last_name, interest, category, ) def upper(self): upper_elements(self) supermod.contactType.subclass = contactTypeSub # end class contactTypeSub def get_root_tag(node): tag = supermod.Tag_pattern_.match(node.tag).groups()[-1] rootClass = None if hasattr(supermod, tag): rootClass = getattr(supermod, tag) return tag, rootClass def parse(inFilename): doc = parsexml_(inFilename) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: rootTag = 'contact-list' rootClass = supermod.contactlistType rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('<?xml version="1.0" ?>\n') rootObj.export(sys.stdout, 0, name_=rootTag, namespacedef_='') doc = None return rootObj def parseString(inString): from StringIO import StringIO doc = parsexml_(StringIO(inString)) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: rootTag = 'contact-list' rootClass = supermod.contactlistType rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('<?xml version="1.0" ?>\n') rootObj.export(sys.stdout, 0, name_=rootTag, namespacedef_='') return rootObj def parseLiteral(inFilename): doc = parsexml_(inFilename) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: rootTag = 'contact-list' rootClass = supermod.contactlistType rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('#from member_specs_api import *\n\n') sys.stdout.write('import member_specs_api as model_\n\n') sys.stdout.write('rootObj = model_.contact_list(\n') rootObj.exportLiteral(sys.stdout, 0, name_="contact_list") sys.stdout.write(')\n') return rootObj USAGE_TEXT = """ Usage: python ???.py <infilename> """ def usage(): print USAGE_TEXT sys.exit(1) def main(): args = sys.argv[1:] if len(args) != 1: usage() infilename = args[0] root = parse(infilename) if __name__ == '__main__': #import pdb; pdb.set_trace() main()
Notes:
Here is a test driver (member_specs_test.py) for our (mini-) application:
#!/usr/bin/env python # # member_specs_test.py # import sys import member_specs_api as supermod import member_specs_upper def process(inFilename): doc = supermod.parsexml_(inFilename) rootNode = doc.getroot() rootClass = member_specs_upper.contactlistTypeSub rootObj = rootClass.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('<?xml version="1.0" ?>\n') rootObj.export(sys.stdout, 0, name_="contact-list", namespacedef_='') rootObj.upper() sys.stdout.write('-' * 60) sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="contact-list", namespacedef_='') return rootObj USAGE_MSG = """\ Synopsis: Sample application using classes and subclasses generated by generateDS.py Usage: python member_specs_test.py infilename """ def usage(): print USAGE_MSG sys.exit(1) def main(): args = sys.argv[1:] if len(args) != 1: usage() infilename = args[0] process(infilename) if __name__ == '__main__': main()
Notes:
We can use the following command line to run our application:
$ python member_specs_test.py member_specs_data.xml
When we run our application, here is the output:
$ python member_specs_test.py member_specs_data.xml <?xml version="1.0" ?> <contact-list locator="http://www.rexx.com/~dkuhlman"> <description>My list of contacts</description> <contact priority="0.050000" color-code="red" id="1"> <first-name>arlene</first-name> <last-name>Allen</last-name> <interest>traveling</interest> <category>2</category> </contact> </contact-list> ------------------------------------------------------------ <contact-list locator="HTTP://WWW.REXX.COM/~DKUHLMAN"> <description>MY LIST OF CONTACTS</description> <contact priority="0.050000" color-code="RED" id="1"> <first-name>ARLENE</first-name> <last-name>ALLEN</last-name> <interest>TRAVELING</interest> <category>2</category> </contact> </contact-list>
Notes:
The following hints are offered for convenience. You can discover them for yourself rather easily by inspecting the generated code.
If a child element is defined in the XML schema with maxOccurs="unbounded" or a value of maxOccurs greater than 1, then access to the child is through a list.
If a child element is defined as a numeric type such as xs:integer, xs:float, or xs:double or as a simple type that is (ultimately) based on a numeric type, then the value is stored (in the Python object) as a Python data type (int, float, etc).
But, when the element itself is defined as mixed="true" or the element a restriction of and has a simple (numeric) as a base, then the valueOf_ instance variable holds the character content and it is always a string, that is it is not converted.
All parameters to the constructors of generated classes have default parameters. Therefore, you can create an "empty" instance of any element by calling the constructor with no parameters.
For example, suppose we have the following XML schema:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="plant-list" type="PlantList" /> <xs:complexType name="PlantType"> <xs:sequence> <xs:element name="description" type="xs:string" /> <xs:element name="catagory" type="xs:integer" /> <xs:element name="fertilizer" type="FertilizerType" maxOccurs="unbounded" /> </xs:sequence> <xs:attribute name="identifier" type="xs:string" /> </xs:complexType> <xs:complexType name="FertilizerType"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="id" type="xs:integer" /> </xs:complexType> </xs:schema>
And, suppose we generate a module with the following command line:
$ ./generateDS.py -o garden_api.py garden.xsd
Then, for the element named PlantType in the generated module named garden_api.py, you can create an instance as follows:
>>> import garden_api >>> plant = garden_api.PlantType() >>> import sys >>> plant.export(sys.stdout, 0) <PlantType/>


Estimation for high conditional quantiles based on quantile regression.
| Version: | 1.0 |
| Depends: | quantreg, mnormt |
| Published: | 2016-07-06 |
| Author: | Huixia Judy Wang |
| Maintainer: | Huixia Judy Wang <judywang at gwu.edu> |
| License: | GPL-3 |
| NeedsCompilation: | no |
| CRAN checks: | EXRQ results |
| Reference manual: | EXRQ.pdf |
| Package source: | EXRQ_1.0.tar.gz |
| Windows binaries: | r-devel: EXRQ_1.0.zip, r-release: EXRQ_1.0.zip, r-oldrel: EXRQ_1.0.zip |
| OS X binaries: | r-release: EXRQ_1.0.tgz, r-oldrel: EXRQ_1.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=EXRQ to link to this page.


Signed in as:
User: #{profileBean.user.username}
E-mail:
Country:
Occupation:
Status:
Time
Status
View diagrams


|
Excimontec
v1.0-beta.3
An open-source KMC simulation software package for modeling organic semiconductor materials and devices, such as OPVs, OLEDs, and more
|
This struct contains all of the main input parameters needed by the Lattice class. More...
#include <Lattice.h>
Public Attributes | |
| bool | Enable_periodic_x |
| Determines whether the x-direction periodic boundaries will be enabled. More... | |
| bool | Enable_periodic_y |
| Determines whether the y-direction periodic boundaries will be enabled. More... | |
| bool | Enable_periodic_z |
| Determines whether the z-direction periodic boundaries will be enabled. More... | |
| int | Length |
| Defines the desired x-direction size of the lattice. More... | |
| int | Width |
| Defines the desired y-direction size of the lattice. More... | |
| int | Height |
| Defines the desired z-direction size of the lattice. More... | |
| double | Unit_size |
| Defines the desired lattice unit size, which is used to convert lattice units into real space units. More... | |
This struct contains all of the main input parameters needed by the Lattice class.
| bool Parameters_Lattice::Enable_periodic_x |
Determines whether the x-direction periodic boundaries will be enabled.
| bool Parameters_Lattice::Enable_periodic_y |
Determines whether the y-direction periodic boundaries will be enabled.
| bool Parameters_Lattice::Enable_periodic_z |
Determines whether the z-direction periodic boundaries will be enabled.
| int Parameters_Lattice::Height |
Defines the desired z-direction size of the lattice.
| int Parameters_Lattice::Length |
Defines the desired x-direction size of the lattice.
| double Parameters_Lattice::Unit_size |
Defines the desired lattice unit size, which is used to convert lattice units into real space units.
| int Parameters_Lattice::Width |
Defines the desired y-direction size of the lattice.


Preparation time
over 2 hours
Cooking time
10 to 30 mins
Serves
Serves 6
Dietary
For the posset, place the double cream and the sugar into a large pan over a low heat and bring to the boil slowly. Boil for three minutes, then remove from the heat and allow to cool.
Add the lemon juice and zest and whisk well.
Pour the lemon cream mixture into six large serving glasses and refrigerate for three hours.
Preheat the oven to 180C/355F/Gas 4.
For the shortbread, sift the icing sugar, flour and cornflour together into a bowl and add the ground almonds.
Transfer the flour mixture to a food processor. Add the butter and pulse until there are no visible lumps of butter.
Add the almond essence. Pulse again, then turn the mixture out onto a lightly floured surface and bring together to form a smooth dough.
Grease a muffin tray with butter.
Divide the dough up and roll into small balls.  The dough should come about one third of the way up the side of each muffin cup to give a nice proportion to the finished biscuit.
Transfer to the oven and bake the shortbreads for 8-12 minutes, until they are a light golden colour.
Remove from the oven, allow to cool slightly, then, using your thumb, make a small indentation into the top of each biscuit.
Let the shortbreads cool for a few minutes, then turn the mould over and tap the shortbreads out. (Be gentle, as the biscuits are fragile while they are still warm.)
When all the shortbreads are baked and cooled, dust the tops with icing sugar.
Fill the indentations in the biscuits with lemon curd.
To serve, place the lemon possets onto plates with a shortbread alongside.


`The Bachelor' -- A Fair Catch by Homer Yen (c) 1999
With the 1999 movie year drawing to a close, you can expect the studios to start releasing a spate of films that will be vying for the Academy's attention. It's Oscar time, so expect films to be more innovative in presentation and weightier in storytelling. But if you're not in search of an Oscar contender, and instead would be content with a lightweight, romantic comedy for a Saturday night, then I would like to marginally recommend `The Bachelor,' a saccharine film where the cutest of couples inevitably find their way into each other's arms.
The couple in question is Jimmie (Chris O'Donnell) and Anne (Renee Zellweger). And according to Jimmie, guys have a strange way of looking at relationships. Men are like wild mustangs running wild through the plains. They stop for the occasional patch of lush grass, symbolic to how men date different women. Once the mustangs are done, they move on. So, it's puzzling to him that he's been going steady with Anne for almost three years. What scares him even more is that all of his friends are also getting married. He is the only bachelor left among his circle of friends. He is the only wild mustang that still roams free. Now, it's just a matter of time. Soon, he'll have to pop the question. However, it is clear that Jimmie isn't ready for marriage. His gives Anne the most awkward and wretched proposal that anyone has ever given. Indeed, his words aren't a proposal but rather a declaration of surrender. This doesn't make Anne very happy. She declines, though Jimmie somehow feels relieved.
Soon after, Jimmie learns that his persnickety uncle (Peter Ustinov) has passed away and has bequeathed to him a $100 million fortune. The only catch is that he must marry before he turns 30, which literally gives him 24 hours to tie the knot. His desire to wed quickly does not stem from the lost inheritance; rather, the provisions of the will would force him to sell the family business and put hundreds of people out of work. With Anne out of the question, Jimmie searches out his old girlfriends with the $100 million proposal. One of his odder second-tier choices was the deranged-looking Buckley (played by Brooke Shields). As she grudgingly begins to take her vows, she keeps repeating `100 million dollars' to herself to convince herself to go forward. But she becomes more rattled when she soon discovers that she'll have to stay wed for 10 long years and even more shaken when she learns that she must give birth to one child. She quickly bolts and the search continues. This includes a front-page article in a newspaper, which leads to a very funny but sweet finale. Despite his need to wed quickly, he still wishes that he could marry Anne. But until he can internalize commitment, that will never happen.
I am marginally recommending this film for two reasons. I enjoyed the final 10 minutes of the film when 1,000 hopeful brides (and a few drag queens) chase Jimmie through the streets of San Francisco. But primarily, it was because I liked Jimmie and Anne. Renee Zellweger is adorable and her smile can brighten the darkest day. Chris O'Donnell is also affable. They both exude energy, and it is their combined charm that allows this movie to stay afloat. `The Bachelor' is somewhat engaging but never disappointing.
Grade: B-
=====
Do You Yahoo!? Bid and sell for free at http://auctions.yahoo.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


MY ACCOUNT
This account for customer
whatever infornation given by the customer
that information display on this page
in this page also display customer how many rooms is book till now
and also appear on this page
offers for booking and also coupon
We hope you have nice experience from our website


Active Projects
· Development on Artificial Intelligence and Machine Learning driven solutions for SDGs
· Research on Promising digital technologies such as Artificial Intelligence, Machine Learning, and GIS applications for development challenges
· Advisory Support to UNDP units on research, development and implementation of digital development solutions with the in-house team and facilitate partnerships with the private sector for UNDP units
Nature, Energy, Climate Cluster
• Large-scale multi-label document classification to automate categorization of project according to a comprehensive taxonomy
• Information retrieval, extraction and aggregation for Vertical Fund Portfolio using natural language processing tools, graphical databases and algorithmic approaches.
Connecting Business initiative
Artificial intelligence R&D for private sector disaster preparedness, response, and recovery
• Technology landscaping and mapping study
• Prototype development based on GIS technology for disaster preparedness, response, and recovery
• Prototype development based on natural language processing techniques for information retrieval from private sector activities and classification
Business Call to Action
• Data visualization for BCtA flagship report
• NLP automation for validation process
PPMI/OSDG
• WG1: Ontology buildings for SDGs
• WG2: Training data preparation and annotation
• WG3: Machine learning research for SDG Classifier
Internal Work Streams
• UNDP country programme document portfolio sense-making
• UNDP jobs and skills demand analysis
• Twitter analysis framework for Covid-19 response studies & Crisis informatics


General Knowlegde Quiz
10 Questions To Answer
No Time Limit
Click Cheat To Help
See Your Score At The End
Play


 AMEN
First name
Last name
Age
Sex
State
Apply


Getures Tracker | Hand Tracker
Use your gestures to control anything. Try triggering some loops in the browser or connect it to a MIDI input and control whatever you want.


{% load staticfiles %} {% load helper_tags_team %}
The road will never be the same
Aaho is working towards simplifying inter-city trucking for shippers as well as transporters. Our platform makes it possible to book, track, and manage all your trucking needs in the quickest, simplest and most cost-effective manner.
We strongly believe that relevant technology interventions can make Indian trucking much more efficient and transparent while benefitting all stakeholders. Our platform is an end-to-end solution that works to solve the various problems faced by businesses as well as fleet owners.
Need reliability and efficiency in goods transportation? The answer is Aaho!
Reach out today to find out how Aaho can save time, effort and money for you.
We work hard, so that you don't have to
We love what we do and who we do it with
People who work hardest with us
Trans IQ Technologies Pvt. Ltd.
610-611, Shivai Plaza Premises Co-Operative Society Limited, Marol Industrial Estate, Marol, Andheri East, Mumbai - 400059,
Contact: +91<PHONE_NUMBER> Email: info@aaho.in


85% of the U.S. population consumes at least one caffeinated beverage per day.
Coffee statistics show that among coffee drinkers the average consumption in the United States is 3 cups of coffee per day.
Over 50% of Americans over 18 years of age drink coffee every day.


For developers: Kntnt CSS Framework — A foundation for modern web sites
This is the lead paragraph. It should summarize the content of the article without revealing too much. The purpose is to give the reader enough so she can decide if the article is relevant and to entice her to read on.
This is the very first paragraph in the body text. It should not be a headline, an image, a table or the like, but just a piece of text. The reason is that this comes directly after the byline. It simply does not look good with anything other than text directly after the byline. A single piece looks best. Then a subheading.
What is Kntnt CSS Framework
Kntnt CSS Framework (KCF) is a comprehensive set of stylesheets that make it easy to build a website relatively quickly by chiefly overriding default values and using classes.
The framework can be used with Oxygen Builder for WordPress. But there is no dependency on either tool, so it works perfectly well with other tools or for handwritten code.
Background
There are many CSS frameworks out there. The arguably most known is Bootstrap – an amazing toolkit “featuring Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful JavaScript plugins.” Two other full-featured CSS frameworks are Foundation and Materialize. Two leaner frameworks worth mentioning are Bulma and Pure.css. They are all great.
But they all focus on grids, buttons and forms – the stuff needed to build an excellent user interface. That’s not what we need at Kntnt.
Content – not grids
KCF is developed by Kntnt – a Swedish sales, marketing and web technology agency. We help companies and organizations to strengthen their brand, drive demand and generate inbound leads with content marketing on the web. We build online magazines for our clients. That’s a central piece in the larger puzzle of attracting potential clients, winning their trust, and converting them to customers.
Therefore, we need re-usable and customizable CSS that allow us to build content-rich web sites that will enable our clients, people who are not designers or developers, to present their content in a flexible way.
How to use it
Star by installing KCF on your site:
- Download KCF
- Unpack the downloaded zip-file
- Locate the directory named
kntnt-css-framework
, which is inside the unpacked directoryand, and move it to the root of your web site.
Now you are ready to use KCF. Use following template for your web pages:
<!DOCTYPE html>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>…</title>
<link rel="stylesheet" href="normalize.css/normalize.css">
<link rel="stylesheet" href="kntnt-css-framework/constants.css">
<link rel="stylesheet" href="kntnt-css-framework/colors.css">
<link rel="stylesheet" href="kntnt-css-framework/defaults.css">
<link rel="stylesheet" href="kntnt-css-framework/normalize.css">
<link rel="stylesheet" href="kntnt-css-framework/page-layout.css">
<link rel="stylesheet" href="kntnt-css-framework/page-styles.css">
<link rel="stylesheet" href="kntnt-css-framework/content.css">
<link rel="stylesheet" href="kntnt-css-framework/positioning.css">
<link rel="stylesheet" href="kntnt-css-framework/faux-columns.css">
<link rel="stylesheet" href="kntnt-css-framework/flexbox-columns.css">
<link rel="stylesheet" href="kntnt-css-framework/utilities.css">
<link rel="stylesheet" href="kntnt-css-framework/utilities-aside.css">
<link rel="stylesheet" href="kntnt-css-framework/wordpress.css">
<link rel="stylesheet" href="…">

…

…

⋮
…
⋮

…

<divid="bottombar">…

Replace …
in
with a valid IETF identifying language tag, e.g. en
, describing the language used by the majority of the content of the page.
Replace …
in <title>…</title>
with the title you want to show in search engines’ result pages and web browsers tabs and title bars.
Replace …
in <link rel="stylesheet" href="…">
with a relative or absolute URL to your stylesheet. Take a look at this page’s stylesheet for inspiration.
If you don’t plan to use KCF with WordPress, remove the line <link rel="stylesheet" href="../kntnt-css-framework/kntnt-wordpress.css">
.
In …
, the first …
is the topbar's content (e.g. with shortcut links to essential pages), and the second …
is the content of the actual header (w.g. with logo and navigation).
In …
, the first …
is the actual footer's content (e.g. with sitemap and social media icons), and the second …
is the content of the bottombar (e.g. with copyright notice and legal disclaimers).
Replace …
with nothing (i.e.

) to disable a row in in …
or …
.
The ⋮
before and after …
represents content that is not unique for the page. Typically, the first ⋮
is used for an important message shown on all pages, while the last ⋮
is used for a gallery with related articles or similar. Each ⋮
is optional. If present, it must consist of at least one pair of outer and inner wrapper:

…

The outer wrapper, i.e.
…

above, should be a semantic element (i.e.

,
,

and
). If no semantic element can be used in inteded way, use

instead. Replace …
with content.
The …
between
and
represents content that is unique for the page. Typically, this is where the page's main content, e.g. a blog post or article, goes. It must consist of at least one pair of outer and inner wrapper described above.
Article
For a page like this, with an article, blog post or similar, …
should contain one

…

where …
is the content of the article.

⋮

Headline
The headline is wrapped by
…

.

Kntnt CSS Framework

You can add a kicker or standfirst by wrapping it in …
and insert it in
…

before the headline with white space or linefeed in-between.

For developers:
Kntnt CSS Framework

You can add a deck or subhead by wrapping it in …
and insert it in
…

after the headline with white a space or linefeed in-between.

Kntnt CSS Framework
— A foundation for modern web sites

Although not recommended, you can add both kicker and deck to a headline.

For developers:
Kntnt CSS Framework
— A foundation for modern web sites

Lead
Use the class lead
on the lead paragraph to make it stand out.

This is the lead paragraph. It should summarize the content of the article without revealing too much. The purpose is to give the reader enough so she can decide if the article is relevant and to entice her to read on

Byline
The byline consists of a
…

wrapping one or more of the following parts in order of your choice:
The author wrapped by either …
or …
, depending on whether the name should be a link or not.
Thomas Barregren
The date when the article was published, wrapped in by <time>…</time>
.
<time datetime="2021-03-28">March 28, 2021</time>
A word or short phrase that categorize the article, wrapped by either …
or …
, depending on whether the category should be a link or not.
News
The result should lookk something like this:

<time datetime="2021-03-28">March 28, 2021</time>
Thomas Barregren
News

Notice that there are no separation characters (e.g. | or •) between the elements. The separators between the elements are inserted by CSS.
Headings
Headings are used to divide a text into sections and explain what the section is about. In academic papers, technical reports, textbooks and similar, it can be beneficial to subdivide sections into subsections and further subdivide the subsections into sub-sub sections and so forth. The design of headings usually adapts to the hierarchy thus created. Usually, the headline has a visual hierarchy, where the heading of a subsection is visually "less" than its section's heading. To that end, HTML supports headings on six levels. These are
…

,
…

and so on to
…

.
Don’t use

Don’t use
…

within your text. It should only be used in the headline described above.
Shun academic headings
Academic texts, reports and many books use intermediate headings at different levels. They are divided into chapters. Each chapter is divided into larger masses of text which in turn are divided into smaller ones which may be divided into even smaller ones, and so on down to paragraphs. Above each division (except for paragraphs) is a heading whose design (for example, size) reflects the division's place in an imaginary hierarchy. These headings are written to summarize everything that falls under them.
Compare that with how newspapers and magazines use headlines. Usually, they only have subheadings, and they are used less as a summary of that particular subsection but more as a lead into what comes next.
I do not know if the different ways have any recognized names, but for the sake of reasoning, we can call them academic headings and journalistic headings, respectively. Of the two, I strongly encourage you to use journalistic headings on the web even when the text has an inherent hierarchical structure.
Subheading
A subheading is created by wrapping the heading with
…

. In most cases, this is the only heading you will use.
Sub-subheading
Despite my general advice, there are situations where it is beneficial for the reader to use sub-subheadings. So, therefore, KCF supports both subheadings and sub-subheadings. The last three headings were sub-subheadings.
A sub-subheading is created by wrapping the heading with
…

.
Paragraph headings
In KCF,
…

through
…

also represents headings, but outside of the hierarchy established by
…

through
…

. These act as headings for the particual paragraph (or possible few paragraphs) that follow.
General paragraph heading
The heading above is an example of a paragraph heading. It is created by wrapping the heading in
…

. It is intended for situations where it's beneficial for the reader to get some help to identify a paragraph among many that talks about a specific topic or similar uses.
Question type heading
In-text with questions and answers, e.g. transcribed interviews and FAQ:s, the questions are natural to use as headings. You can use
…

to markup your questions in these and similar circumstances. Here is a couple of examples:
Who are you?
My name is Thomas. I'm co-owner of Kntnt – a Swedish sales, marketing and web technology agency. We help companies and organizations to strengthen their brand, drive demand and generate inbound leads with content marketing on the web.
Why did you develop KCF?
We build online magazines for our clients. That's a central piece in the larger puzzle of attracting potential clients, winning their trust, and converting them to customers. These online magazines are built on a common foundation, which includes re-usable HTML, CSS and JS. Previously, we used Less to make customization of the CSS. I prefer Less above Sass since it's leaner. I like to keep things as lean and straightforward as possible. And that got me thinking of using CSS built-in capabilities, such as var()
, calc()
, max()
and min()
, to make our workflow even easier and leaner. That resulted in KCF.
Run-in heading
H6 gives a run-in heading. It is a heading at the beginning of a paragraph. It can be used, for instance, as an alternative to a description list or unordered list.
First point.
This is an example of how it looks when
…

is used to make paragraphs look like a listing of some sort. Each "point" starts with a heading, which is wrapped by
…

and then followed by the actual paragraph.
Second point.
This approach is better than just using bold or italic font since it provides semantics of importance for search engines and other "machine readers".
Third and last point.
Usually, headings don't end with punctuation other than an exclamation mark or question mark. Run-in headers are different. Here it could be beneficial to use a dot or colon or maybe even a dash.
Unordered lists
An unordered list is a list of items without implied order.
Following is an example of how to create an unordered list of Swedish kings that have ruled during the 20th century:

Oscar II

Gustav V

Gustav VI Adolf

Carl XVI Gustaf

The result looks like this:
- Oscar II
- Gustav V
- Gustav VI Adolf
- Carl XVI Gustaf
The character before each item can be changed by adding a class either to the

-element or to an individual

-element. Following classes are available:
none
disc
circle
square
Ordered lists
An ordered list is a list of items with implied order (e.g. by number).
Following is an example of how to create an ordered list of the top three places in the Swedish selection for the Eurovision Song Contest 2018:

Dance You Off med Benjamin Ingrosso

Every Single Day med Felix Sandman

My Turn med John Lundvik

The result looks like this:
- Dance You Off med Benjamin Ingrosso
- Every Single Day med Felix Sandman
- My Turn med John Lundvik
The numerals before each item can be changed by adding a class either to the

-element or to an individual

-element. Following classes are available:
none
decimal
decimal-leading-zero
roman
roman-upper
latin
latin-upper
greek
Nested lists
It is possible to place a list inside another list. This is what it might look like:
-
Item 1
-
Item 2
-
Item 2.1
-
Item 2.2
-
Item 2.2.1
- Item <IP_ADDRESS>
- Item <IP_ADDRESS>
- Item <IP_ADDRESS>
-
Item 2.2.2
-
-
Item 2.3
-
-
Item 3
Description list
A description list is a list of groups of terms (each wrapped by
…

) followed by a group of descriptions (each wrapped by
…

). It's often used for key-value tables, e.g. glossary or metadata.
Following is an example of how description list can be used to describe some Swedish apples:

Aroma

Aroma is round in shape and has a greenish-yellow to yellow color with red streaks. Aroma ripens in late September through December and sometimes longer. Suitable for growing in zones 1-4.

Katja

The size is medium, and the color is green to yellow. If the fruit has been in the sun, it can be almost completely covered in a warm red color. Katja matures from August to November and is suitable for growing in zones 1-4.

Transparente blanche

The color is yellowish white and medium in size. The apple ripens from mid-August and can be grown in zones 1-6

The result looks like this:
- Aroma
- Aroma is round in shape and has a greenish yellow to yellow color with red streaks. Aroma ripens in late September through December and sometimes longer. Suitable for growing in zones 1-4.
- Katja
- The size is medium and the color is basically green to yellow. If the fruit has been in the sun, it can be almost completely covered in a warm red color. Katja matures from August to November and is suitable for growing in zones 1-4.
- Transparente blanche
- The color is yellowish white and medium in size. The apple ripens from mid-August and can be grown in zones 1-6
The following shows how many terms can share the same description:

Aroma

Katja

Transparente blanche

Swedish apples

Clara Frijs

Greve Moltke

Danish pears

This is how it looks like:
- Aroma
- Katja
- Transparente blanche
- Swedish apples
- Carola
- Clara Frijs
- Greve Moltke
- Danish pears
Finally, one term can have several descriptions:

Carola

A Swedish apple variety.

A Swedish artist who has won the European Song Contest.

Moltke

A Danish apple variety.

A Dansih duke born 1785 and died 1864.

This is how it looks like:
- Carola
- A Swedish apple variety.
- A Swedish artist who has won the European Song Contest.
- Moltke
- A Danish apple variety.
- A Danish duke who gave named to an apple variety.
Tables
For more complicated layouts than lists, a table can be used.
This example shows how to use
…

to present the three smalles municipals of Sweden:

Population in Sweden's three smallest municipalities

Municipality
Population

Bjurholm
2 387

Sorsele
2 442

Dorotea
2 498

This is how it looks:
| Municipality | Population |
| Bjurholm | 2 387 |
| Sorsele | 2 442 |
| Dorotea | 2 498 |
Notice that
…

wraps the table caption. It must be the first descendant of the
…

.
By default, the caption is printed above the table. If you prefer to have it at the bottom, don't move
…

. Just add the class underneath
. Here is an example:

Tabell där två celler är sammanslagna horisontellt och två celler är sammanslagna vertikalt.

Namn
Telefonnummer

Adam
010-203040
010-506070

Berit
090-807060

Now, the caption is at the bottom of the table:
| Namn | Telefonnummer | |
|---|---|---|
| Adam | 010-203040 | 010-506070 |
| Berit | 090-807060 |
Using
…

is the recommended way to add a caption to a table. But it's possible to use the more generic form presented next.
Figures and captions
Illustrations, diagrams, photos, video, audio, code listings and similar things referenced in the text, but can be moved to another part of the page without affecting the meaning of the content, should be wrapped by
…

.
Such self-contained content usually has a caption. This option should be wrapped by
…

and put either as the first or the last descendant of
…

.
Following is a typically use:

Photo: Bessi.

This is the result of the above code.
Notice that
…

must be either the first or the last descendant of
…

. Its placement determines if the caption is shown above or below, respectively, the content. This is how the above image looks if
…

is moved to the top.
Images
There are a lot to say about images on the web. That is, however, out of scope of this artcile. Its purpose is to show how to use KCF. But I will offer some advice:
Image file format
Use WebP or JPEG for photographs. Use WebP, PNG-8 or GIF for illustrations with few colors, no large tinted surfaces or alpha channel. Use WebP or PNG-24 for illustrations with many colors, large tinted surfaces or alpha channel.
Crop
As a rule of thumb, crop images to the classic proportions of 3:2 (landscape) or 2:3 (portrait) if you don't need a more specific crop.
Resizing
Resize the cropped image to all possible image sized used by KCF:
| Landscape | Portrait |
|---|---|
| 1920 × 1280 | 1920 × 2880 |
| 1060 × 707 | 1060 × 1590 |
| 900 × 600 | 900 × 1350 |
| 600 × 400 | 600 × 900 |
| 450 × 300 | 450 × 675 |
| 300 × 200 | 300 × 450 |
| 225 × 150 | 225 × 338 |
Save images
Save the different sizes with names that end with dash and the width. For instance, if the original image file is named image.jpg
, name the resulting image files as follows:
image-1920.jpg
image-1060.jpg
image-900.jpg
image-600.jpg
image-450.jpg
image-300.jpg
image-225.jpg
You should save these files at near maximum quality. In the next step, we will compress them further.
Compression
Run the saved images through one of following image optimization software:
- Linux
- Trimage
- Mac OS X
- ImageOptim
- Windows
- Pingo
PNG and GIF are not lossy in themselves, but the above-suggested software can do lossy compression if you allow it. Do that.
Don't fear lossy compression. Try to compress the images as much as you can. As long as you can't see any quality losses, its okay.
Make sure no file, not even the largest ones, are bigger than 2MB. Preferably, they should be much smaller.
Include images
After uploading the images, its time to use them. Following code is not optimal, but better

The result looks like this:
Inline quotes
A quote inside a text is called an inline quote. A such begins and ends with quotation marks. Although you can enter them yourself, it is higly recommeded to let the web browser do it for you. Most people don’t know how to produce typographic correct quotation marks on their keyboards, and end up using the inch-symbol "like this" instead of proper quotation marks “like this”. Modern web browsers insert correct quotation marks for tha language set with the lang
attribute. What’s correct quotation marks varies from language to language. Some examples:
Ceci est une citation française
Dies ist ein deutsches Zitat
To jest polski cytat
Detta är ett svenskt citat
This is an English quote
To allow the web browser to insert quotation marks for you, wrap the quote with <q>…</q>
. Don’t write quotation marks yourself. This is an example of how to do it:

When Dave asks HAL to open the pod bay door, HAL answers: <q>I’m sorry, Dave. I’m afraid I can’t do that.</q>

The result looks like this:
When Dave asks HAL to open the pod bay door, HAL answers: I’m sorry, Dave. I’m afraid I can’t do that.
Another advantage of using <q>…</q>
is that you can add a machine-readable link to the source with the cite
attribute. Here is an example:

When Dave asks HAL to open the pod bay door, HAL answers: <q cite="https://www.imdb.com/title/tt0062622/quotes/qt0396921"> I’m sorry, Dave. I’m afraid I can’t do that.</q>

The URL is not rendered:
When Dave asks HAL to open the pod bay door, HAL answers: I'm sorry, Dave. I'm afraid I can't do that.
Blockquotes
Longer quotes that are reproduced in a separate paragraph are called block quotes.
Notice that the cite
attribute isn’t rendered. It’s optional. If included, it must be a URL that designates a source document or message for the information quoted. This attribute is intended to point machines (e.g. search engines) to information explaining the context or the reference for the quote.
 It should not contain the author’s name or anything else.

Editing text
Many people who write for the web want to forget what they are writing needs to be converted to HTML Unfortunately, word processors and text editors are lousy at creating semantically correct HTML code. Therefore, every web writer should know basic HTML and be prepared to use it. In this article, there are many examples of what you can do. However, the article is not a course in HTML. Nevertheless, in this section, we will get acquainted with HTML elements that are primarily there to give text semantic meaning and graphic style.

, <dfn>
,
, <var>
and
Several HTML elements make the content they wrap rendered italicized. They differ in their semantic meaning. Choose wisely.
-
Use
…
to markup a word or a phrase that need emphasis. Example: This is indeed essential. -
Use
<dfn>…</dfn>
to mark a word or a phrase that is defined. Example: In this context, pilot refers to… -
Use
…
to markup a name of a creative work. Example: Shakespar wrote Hamlet. -
Use
<var>…</var>
to markup a letter as a variable. Example: x = 2. -
Use
…
to markup text that need to be differentiated from ormal text. Here are some examples listed in MDN Web Docs:- Alternative voice or mood
- Taxonomic designations (such as the genus and species "Homo sapiens")
- Idiomatic terms from another language (such as "et cetera"); these should include the
lang
attribute to identify the language - Technical terms
- Transliterations
- Thoughts (such as "She wondered, What is this writer talking about, anyway?")
- Ship or vessel names in Western writing systems (such as "They searched the docks for the Empress of the Galaxy, the ship to which they were assigned.")

and
Two HTML elements are rendering their wrapped content with boldface but with different semantic meaning:
- Use
…
to markup a word or a phrase that need strong emphasis. Example: Warning: The coffee is hot. - Use
…
to bring attention to to the marked up word or phrase. MDN Web Docs suggest using it for cases like keywords in summary, product names in a review, or other spans of text whose typical presentation would be boldfaced (but not including any special importance).

If you need to mark or highlight a portion of a text, wrap it with …
.
Example: Anaphora is a figure of speech in which words repeat at the beginning of successive clauses, phrases, or sentences. Dr Martin Luther King Jr. eminently used anaphora in his famous talk from 1963:

and <s>
The two elements …
and <s>…</s>
draw a line under and through, respectively, their wrapped content.
- Use
…
as an unarticulated annotation of the wrapped text. Example: In this text, speling mistakes are underlned. - Use
<s>…</s>
to show that the wrapped content are no longer relevant or no longer accurate. Example:Use<s>
to decorate your text.

and
Use …
and …
to wrap text that has been inserted and deleted, respectively.
- Use
…
to markup text that have been inserted. Example: He has got a new coat. -
…
to markup text that have been deleted. Example: The gave me his olduglycoat.

and
Use …
and …
to create superscript and subscript respectively.
- Use
…
to display…
as superscript. Example: The Pythagorean theorem: a2 + b2 = c2 - Use
…
to display…
as subscript. Example:Almost every writer's favorite molecule is C8H10N4O2 – also known as “caffeine.”

,
,
and <samp>
To represent computer code, input and output and similar, we have
,
and <samp>
, respectively.
- Use
…
to markup short fragment ofcomputer code
. Example: The tag

represents line feed. - Use
…
to illustrate keys on the keyboard. Example: Press ⌘ + S to save. - Use
<samp>…</samp>
to represent a sample output from a computer. Example: If you see Error on the screen, something went wrong.

To represent longer text that must appear exactly as preformatted – as if it were written on a typewriter – use
…

.
Follwoing HTML code, adapted from MDN Web Docs presentation of

is an example where it's important to wrap the content in
…

:

----------------------------
| I'm an expert in my field. |
----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

Here is the result:
---------------------------- | I'm an expert in my field. | ---------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||

Use …
to wrap abbreviations and acronyms.
It would of course be silly to wrap every e.g., i.e., etc and so forth with …
. Use it instead with the title
attribute, as shown below, when introducing an abbreviation or acronyme that might be unknonw for the read.

HTML is a markup language used to create the semantics and structure of a web page.

The result is a discreet marking of the abbreviation, indicating that the users can hover over the abbreviation to see an explanation in a tooltip.
HTML is a markup language used to create the semantics and structure of a web page.
Positioning and styling of content blocks
KCF gives you the opportunity to influence the width and position of a block of content and thereby create pull quotes, calboxes and more.
Positioning
By default, blocks are positioned between paragraphs with indentation. By applying one of the classes in the table below, their size and position will change.
| Class(es) | Position |
|---|---|
| indent (or no class) |
Indented from column's left, taking up as much horizontal space as needed with respect to indention from column's right. |
| center | Centered column's left and right indention. |
| wide | Stretched as wide as the column |
| protrude wide | Stretched as wide as header/footer |
| margin wide | Stretched between viewport edges |
| left/right | Aligned to left/right column edge with half column width |
| protrude left/right | Aligned to left/right header/footer edge with half column width |
| margin left/right | Aligned to left/right viewport edge with 1rem distance and third column width |
The positioning classes above must only be used on following elements:

…

…<\ul>

…<\ol>

…

…

…

…

…

…

Moreover, the positioning classes above must only be used on an element that is not wrappen by any other element. Thus, following example is not valid:

However, following is valid and will produce the expected result:

Styling
With positioning comes some styling. Most of it happens behind he curtain, to ensure the expected look of the positioned element. But there is a class designed to go hand in hand with positioning: panel
.
When a positioned element has the class panel
, its content are slightly reduced and displayed in a panel with border and padding. The effect is even more noticeable if you use one of the predefined color classes (see below) or yor own customized color class.
For an example, let’s start with a centered
…

with some silly content. The result looks like this:
It doesn't look centered. That's because the text within the wrapper
…

isn't centered. But the wrapper itself is centered. Hover or tap on it to see the otherwise invisble wrapper.
Now add the class panel
:
…

. Here is how it looks like:
It looks like the content has moved into a panel and shrunked a tad to get some space around itself.
And finally give it some color:
Finally, add a color class to it:
…

. This is the result:
Neat, yeah? You will see more examples with and without panel
applied below.
Demonstration of postioning classes
Below, you find examples of application of each class. Please check it on vary sceen sizes.
Class: (no class)
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Class: center
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Class: wide
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Class: protrude wide
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Class: margin wide
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Class: left
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Class: right
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Class: protrude left
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Class: protrude right
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Class: left margin
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Class: right margin
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum semper rhoncus nulla vitae faucibus. Curabitur ac felis at purus volutpat pharetra vel dignissim enim. Integer cursus massa fringilla venenatis varius.
Nulla ac molestie ipsum. Aenean imperdiet, dui non sagittis fringilla, ipsum augue hendrerit dui, quis dignissim neque massa a massa. Pellentesque malesuada augue venenatis sem tincidunt sagittis. Phasellus ut arcu ex.
Nulla scelerisque, sapien id vestibulum porta, erat mauris tristique mauris, vitae blandit libero augue eu nunc. Nam imperdiet sapien vitae consequat auctor. Curabitur ac leo efficitur tortor maximus blandit quis ac metus. Morbi et fermentum est.
Demonstration of all permissble blocks
Below, you find examples demonstrating positioning of block content.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
Life is a long lesson in humility
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
- Oscar II
- Gustav V
- Gustav VI Adolf
- Carl XVI Gustaf
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
- Dance You Off med Benjamin Ingrosso
- Every Single Day med Felix Sandman
- My Turn med John Lundvik
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
- Aroma
- Aroma is round in shape and has a greenish-yellow to yellow color with red streaks. Aroma ripens in late September through December and sometimes longer. Suitable for growing in zones 1-4.
- Katja
- The size is medium, and the color is green to yellow. If the fruit has been in the sun, it can be almost completely covered in a warm red color. Katja matures from August to November and is suitable for growing in zones 1-4.
- Transparente blanche
- The color is yellowish white and medium in size. The apple ripens from mid-August and can be grown in zones 1-6
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
| Municipality | Population |
| Bjurholm | 2 387 |
| Sorsele | 2 442 |
| Dorotea | 2 498 |
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
---------------------------- | I'm an expert in my field. | ---------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Block:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis vel neque ut nisi eleifend aliquet. Aenean ut enim sapien. Praesent ultrices maximus nunc, non mattis sapien dapibus non. Nullam tincidunt interdum nunc, a euismod ligula sollicitudin sollicitudin.
Curabitur malesuada metus consequat felis consectetur sodales. Integer commodo, nunc ac facilisis suscipit, enim libero vehicula nulla, id vestibulum diam ipsum eget ex. Integer vel bibendum justo. Sed porta, lorem id cursus luctus, risus metus ullamcorper libero, ut euismod ante massa sed lorem.
Nunc vel arcu sed tortor elementum sagittis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas ut orci vel dui tincidunt euismod.
Demonstration of common nested blocks
Below, you find examples with nested elements. Notice that the position classes are only used on the outermost of them. Please check it on vary sceen sizes.

<image … >
…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla cursus dui sit amet diam semper vehicula. Etiam id est a elit condimentum consectetur a eu diam.
Suspendisse sagittis mauris at lectus aliquet aliquam. Pellentesque sagittis consectetur ornare. Interdum et malesuada fames ac ante ipsum primis in faucibus.  Maecenas luctus ultricies massa, tempor interdum erat semper in. Suspendisse hendrerit, nisi at tempus semper, dolor odio volutpat neque, malesuada facilisis velit velit eget diam. Maecenas iaculis et elit a tincidunt. Pellentesque lacus eros, finibus quis semper id, bibendum bibendum nisi.

…

…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla cursus dui sit amet diam semper vehicula. Etiam id est a elit condimentum consectetur a eu diam.
Suspendisse sagittis mauris at lectus aliquet aliquam. Pellentesque sagittis consectetur ornare. Interdum et malesuada fames ac ante ipsum primis in faucibus.  Maecenas luctus ultricies massa, tempor interdum erat semper in. Suspendisse hendrerit, nisi at tempus semper, dolor odio volutpat neque, malesuada facilisis velit velit eget diam. Maecenas iaculis et elit a tincidunt.  Nulla cursus dui sit amet diam semper vehicula. Etiam id est a elit condimentum consectetur a eu diam.
Suspendisse sagittis mauris at lectus aliquet aliquam. Pellentesque sagittis consectetur ornare. Interdum et malesuada fames ac ante ipsum primis in faucibus.  Maecenas luctus ultricies massa, tempor interdum erat semper in. Suspendisse hendrerit, nisi at tempus semper, dolor odio volutpat neque, malesuada facilisis velit velit eget diam. Maecenas iaculis et elit a tincidunt. Pellentesque lacus eros, finibus quis semper id, bibendum bibendum nisi.

…

…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla cursus dui sit amet diam semper vehicula. Etiam id est a elit condimentum consectetur a eu diam.
Suspendisse sagittis mauris at lectus aliquet aliquam. Pellentesque sagittis consectetur ornare. Interdum et malesuada fames ac ante ipsum primis in faucibus.  Maecenas luctus ultricies massa, tempor interdum erat semper in. Suspendisse hendrerit, nisi at tempus semper, dolor odio volutpat neque, malesuada facilisis velit velit eget diam. Maecenas iaculis et elit a tincidunt. Pellentesque lacus eros, finibus quis semper id, bibendum bibendum nisi.
Dealing with floats
When any of the classes left
and right
are applied to an element, the element moves to left or right (obviously) and leaves a space next to it. The elements following after the moving element are allowed to move up and fill that space. The element moved is said to float and the elements filling the empty space it leaves are said to wrap the floating element.
The default behaviour is usually what we want. But sometimes it is not desired for the content following to move up and wrap the floating content. An example is when we have several left/right aligned images with to little text between them. Then the images get stapled on each other, while the text that was supposed to come after each image are moved up and put next to the first image.
This text belongs to the first picture.
This text belongs to the second picture.
This text belongs to the third picture.
And so on. To prevent this KCF offers several solutions. The easiest of them all is to use an invisible horizontal ruler that prevens content following it to move up above it. You get the ruler by putting

where you want the flowing up bondary. Here comes the same example as above, but now with

after each text. Notice how the text beloing to the image is allowed to move up, but not content following

.
This text belongs to the first picture.
This text belongs to the second picture.
This text belongs to the third picture.
That looks better! Don't you think?
If you want to prevent an element to move up and wrap around a floating element, you can add the class dont-wrap
on it instead of putting

before it.
Yet anoter solution is to put the class clear
on a wrapper around the floating element. This solution is handy when you have a wrapper, e.g.
…

containing only floating elements. See faux columns below for an example.
Horizontal lines and dinkuses
To get a visible horizontal line, use

with a style class specifying the llok of the line. Without a style class,

is invisble, but still useful as a stopper of content that otherwise would have flowed upwards, due to a float (see above). HCF offers following classes:
Single solid line:

Double solid lines:

Dashed line:

Dotted line:

Instead of a line, you can get a dinkus. That is a small a small piece of artwork used in magainzes and books. KCF supports following dinkus:
Three stars in line:

Asterism:

Fleuron:

Faux columns
KCF offerts two solutions to organizae content i “rows” and “columns”. Here we take a look at the simplest solution: faux columns.
They are faux since the content of one column is not flowing to the next as they do in ”real” columns that you find for instance in newspapers and magazines. What you put in a faux column, stays in that column. Thus, a faux column behaves exactly as a cell in a speradsheet.
With faux columns you can divide the available horizontal space in 1 trough 4 columns, and you can tell each column to occupy 25, 33, 50, 67, 75 or 100 percentage of the avilable width. The percentage with of all columns making up a row must always be 100 % – of course. Thus, following divisions of a row is possible:
The biggest benefit of faux columns over flexbox columns, presented next, is that you don’t need any wrappers around rows, columns or content. You just slap classes onto elements that you want to form columns. There are three kinds of classes you need:
Numer of columns
col1
⇒ 1 column
col2
⇒ 2 columns
col3
⇒ 3 columns
col4
⇒ 4 columns
Numer of columns
width25
⇒ 25% width
width33
⇒ 33% width
width50
⇒ 50% width
width67
⇒ 67% width
width75
⇒ 75% width
width100
⇒ 100% width
Boundary markers
first
⇒ first column
last
⇒ last column
This is how the classes are used to accomplish the above demonstration of all possible combinations of columns.

100%

50%

50%

25%

75%

75%

25%

33%

67%

67%

33%

33%

33%

33%

25%

25%

50%

25%

50%

25%

50%

25%

25%

25%

25%

25%

25%

Notice that there are no wrapper element around any cell, any column or any row – as stated above – but there is one around the whole collections of rows. This is beacuse columns are ”floats" (see above), and thereby allows the next sibling after it to place itself next to it. That’s how the row is formed. But that also allows the first sibling to the last column to sneak up and find gaps underneath or to the right of the columns where it spreads it content. Not pretty. Thus, we often need to wrap rows of columns with
…

to force the siblings to stay underneath the row.
Another thing, which might be an issue, is that each column are not taller than necessary. Thus, you probably don’t want to use a background color on the columns as seen below:
For better control, but also more cumbersome syntax, take a look at flexbox columns.
Flexbox columns
Start by making an element into a row by ading the class row
followed by one of the row-…
classes that identifies how many columns the row should have:

…

Create the required number of columns:

…

…

…

Finally, create desired number of cells in each column:

…

…

…

…

…

…

It's possible to add rows in columns like this:

…

…

…

The class stacks-normal-1024
makes columns stack on top of each other if the wide is smaller than 1024 px:

…

…

The columns are stacked with the first column above and the second below and so forth. By using the class stacks-reverse-1024
instead, the stack order is reversed.
The classes stacks-normal-768
and stacks-reverse-768
works the same but for widths lessthan 768 px.
By default, with exception for <input>
, any element put in columns gets 0.5 rem padding, 0 margin, border-box sizing and block display. Moreover, list items get its bullet or number placed inside the bounding box.
By adding the class has-no-gutter
on a column or a row, this default behaviour is stopped for the column or row, respectively.

…

By adding has-no-gutter-left
or has-no-gutter-right
on a column, the left or right padding, respectively, is removed for all objects in that column.
By adding has-no-gutter-top
or has-no-gutter-bottom
on a row, the top or bottom padding, respectively, is removed for all objects in columns of that row..
Finally, let’s take a look at an example:

<dib> a) 25%

 b) 25%

 c) 50%

 d) 50%

 e) 50%

 f) 50%

 g) 50%

 h) 67%

 i) 33%

 j) 25%

 k) 25%

 l) 25%

 m) 25%

 n) 100%

The result looks as follows.
Links and buttons
Next up to implement
Forms
Next up to implement
Color classes
Implemented but not documentet.
Miscellaneous classes
Implemented but not documentet.
Ideas for future
Following is a list of ideas for the future in no particualr order:
- Replace the current flex-box solution for sticky footer with a grid solution
- Multi-columns (CSS Multi-column Layout)
- Styling of

- How to work with
<embed>
,<object>
and
- Grids
- Cards of images and other ”blocks” with various looks
- Gallery of images and other ”blocks” with various looks
- Carousell of images and other ”blocks” with various looks (likely JS)
- Parallax effetcs (likely JS)
- Lightbox with
<dialog>
(likely JS)


RocketLauncher webifWant the code?The RocketLauncher "driver" code, and webif written by Ian Page Hands. Thanks to Dan Krasinski for figuring out the usb command codes and writing some example code. The webcam applet is a sourceforge project. Controls
|


Announcement Page¶
This page consists of the announcements about upcoming events and recent events by your Girlscript Chapter. It consists of 2 sections which are as follows:
Upcoming events: This section consists of the upcoming events in a timeline format.
If you want to make changes in this section, carry out the following changes in code:
To make changes in the heading - Go to announcements.html and search
Upcoming
, you will see <h2> tag where you can make changes.
To make changes in the content of cards - Go to announcements.html and search
timeline-content
, you will see <h2> and <p> tags where you can make changes in the heading and the description respectively.
To make changes in the button - Go to announcements.html and search
card-stats
, you will see <a> tag where you can change the path in the href.
To add an additional event - Go to announcements.html and search
timeline-container right
where you can copy the whole <div> and just replace theright
class withleft
so that the added card is shown on the left hand side, then you can change it’s heading and description of the event under <h3> and <p> page respectively.
To add the time of the event - Go to announcements.html and search
time
where you can change the date accordingly.
Recent events: This section consists of the recent events that are being conducted by your GirlsScript.
If you want to make changes in this section, carry out the following changes in code:
To make changes in the heading - Go to announcements.html and search
Recent
, you will see <h2> tag where you can make changes.
To modify the images in the cards - Go to announcements.html and search
card-image
, you will see <img> tag where inside href you have to change the path of the new image.
To modify the heading and content of the card - Go to announcements.html and search
card-text
then you can change it’s heading and description under <h2> and <p> page respectively.
To make changes in the button - Go to announcements.html and search
card-stats
, you will see <a> tag where you can change the path in the href.
To add an additional event - Go to announcements.html and search
card r-events-card
where you can copy the whole <div> and change it’s heading and description under <h2> and <p> page accordingly.


XQuery includes a number of built-in data types that can be used in its expressions. These data types include:


Black Eyed Peas is an American musical group consisting of rappers will.i.am, apl.de.ap, Taboo and J.Rey Soul. Originaly an alternative hip hop group, they subsequently refashioned themselves as a more marketable pop-rap act.
Fergie(2002 -2016)
Fergie Duhamel, professionally known by her stage name Fergie, is an American singer, songwriter, and actress. She first achieved chart success as part of the hip hop group the Black Eyed Peas.
will.i.am(Since 1995)
William Adams (born March 15, 1975), better known by his stage name will.i.am (pronounced "Will-I-am"), is an American rapper, singer, songwriter, record producer, entrepreneur, and actor. He is the founding and lead member of the musical group Black Eyed Peas.
Taboo(Since 1995)
Jaime Luis Gomez, better known by his stage name Taboo, is an American rapper, songwriter, actor and DJ, best known as a member of the musical group The Black Eyed Peas.
apl.de.ap(Since 1995)
Allan Pineda Lindo, better known by his stage name apl.de.ap, is a Filipino-American rapper, singer and record producer best known as a member of the hip hop group Black Eyed Peas.
Kim Hill(1995 - 2000)
Kimberly Allise Hill is an American soul musician, best known for her work with the hip hop group Black Eyed Peas.
My top 15 Black Eyed Peas songs:
My Favorite songs