Supporting multiple languages in a single document

Milian Wolff mail at milianw.de
Sun Jun 6 14:46:28 UTC 2010


On Sunday 06 June 2010 13:24:34 Milian Wolff wrote:
> Hey there,
> 
> during my GSOC I definitely have to solve the current issue where multiple
> languages are used in a single document.
> 
> Right now one language "wins" since the background parser only create a
> parsejob for the first language it gets. See:
> 
> 
>             // TODO more thinking required here to support multiple parse
> jobs per url (where multiple language plugins want to parse)
>             return job;
> 
> Now with CSS, PHP and XML language plugins we need a solution for that. My
> current idea is this:
> 
> - weight languages, i.e. preprocessors (ruby, php, ...) come first
> - XML/HTML is next
> - embedded JavaScript/CSS is last
> 
> Now assume we have this file:
> 
> foo.php
> 
> <!DOCTYPE html>
> <html>
>   <head>
>     <title><?php echo $title; ?></title>
>     <style type="text/css">
>      #foo { color:red; }
>     </style>
>   </head>
>   <body></body>
> </head>
> 
> The preprocessor knows what it has to parse, i.e. only <?php ... ?>
> 
> It _somehow_ (this really needs to be discussed!) triggers a parsejob for
> XML and tells it: you only have to care for ranges <!DOCTYPE to <title>
> and </title> to </head>.
> 
> XML does it's magic and tells CSS (again, how?) to parse the code between
> <style>...</style>
> 
> Problems / Questions:

I just remembered:

maybe it makes sense to somehow store the language-for-document-range 
somewhere, so it could be reused in e.g. code completion to call the proper 
completion worker.

> - how to trigger a parsejob for only a given list of ranges in a document?
> we could use a new method in the BackgroundParser for that...
> 
> - how to know what language to use in the "deeper" parsejobs? I mean php
> doesn't know it's emitting html, xml, css, $whatever. But HTML otoh _does_
> know what it embeds (you always pass the mimetype hence we could use our
> current mechanism to find the language for that).
> 
> I think for now it would suffice if we hardcode HTML aka XML in PHP since
> thats what its used for most often. Later on we could think about ways to
> let the user configure what a given file is outputting.
> 
> Note: If we'd run _all_ languages at the same "weight" we'd have the
> problem that:
> 
> a) each language must know what to exclude where, i.e. needs at least a
> limited knowledge about php, ruby, ... => complex, error prone and much
> code duplication
> b) a file has only one mimetype, hence we'd have something like right now
> where CSS is registered for the HTML mimetypes. Ugly and not really
> correct
> 
> I think I'll try to write some code for my idea and see how it works...

-- 
Milian Wolff
mail at milianw.de
http://milianw.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20100606/64163ab7/attachment.sig>


More information about the KDevelop-devel mailing list