Reusing KHTMLs CSS parser for a KDevelop language plugin
Milian Wolff
mail at milianw.de
Wed Oct 21 22:19:32 BST 2009
On Wednesday 21 October 2009 22:38:18 Maksim Orlovich wrote:
> <snip>
>
> > Alternatively to the above, are there maybe KHTML APIs I can use that
> > give me a low-level analysis of a given CSS file? I'd need e.g. a list of
> > rule definitions, imports, charset statements, together with line numbers
> > where they occur. That should actually be enough to build a DUChain.
>
> That exists already --- DOM level 2 CSS is exported to C++, see the header
> files dom/css_*.h. It may not be perfect though, since CSS parsing is
> freaky, and very much non-uniform --- pretty much every property requires
> special parsing code to get right; and so you only get an accurate model
> for things KHTML supports; so for example properties with other vendor
> prefixes would not get much info. Also a lot of other implementations like
> Gecko simply chose to ignore parts of DOM2 CSS, so some methods may not
> have had much real-life testing..
>
> There is no line number info, though; and I am not sure def/use is the
> right abstraction, either --- CSS is pattern matched, after all, in a
> fairly complex way.
The thing is, we don't really need DOM access. I mean, we want to support the
developer _while writing the css document_. We don't know to which documents
he applies this style. Hence DOM sounds like nothing for us.
So far I plan/hope to support def's in CSS documents. No uses. But this would
still offer the developer lots of help, with quick navigation, outline etc. pp.
As far as I understand you, this is a no-go then. I'll copy your tokenizer, as
that should be implementation agnostic, i.e. the tokens should be the same for
KHTML/Gecko/WebKit, well I'll take a look.
It should at least help me get started. Maybe I can even simplify your code to
my needs, as I potentially don't need as much as you [1], since I don't want
to render anything. I just want a sane tokenizer (and code completion on top
of that), and a syntax parser (for inline syntax checking). Creating a few
definitions for document outlines and quick navigation should be trivial than.
> > Note that most of the above could be applied to other languages as well,
> > most notably JavaScript/ECMA Script and XML/HTML/XHTML.
>
> HTML/XML DOM is public as well. ES AST is way too tied to the
> implementation to be made public, and getting useful dataflow for that
> abomination of the language is borderline impossible (though I suppose
> kdevelop can afford to be unsound?); however it may be possible to
> abstract something via KJSAPI
JS/ES is off then, lets see if we can come up with something for that
eventually. And regarding HTML/XML I fear the same as above is to be said.
Thanks very much for your insight.
[1]: So this would be basically a fork so I can re-use it's functionality for
KDevelop. That should be OK with you == all KHTML devels, right? Since we have
a completly different use-case than you.
--
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/kde-core-devel/attachments/20091021/f818299c/attachment.sig>
More information about the kde-core-devel
mailing list