\ g+ scheme
\ Copyright (C) 2018 Bernd Paysan
\ This program is free software: you can redistribute it and/or modify
\ it under the terms of the GNU Affero General Public License as published by
\ the Free Software Foundation, either version 3 of the License, or
\ (at your option) any later version.
\ This program is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\ GNU Affero General Public License for more details.
\ You should have received a copy of the GNU Affero General Public License
\ along with this program. If not, see <http://www.gnu.org/licenses/>.
require parser.fs
cs-scope: g+
object class{ comments
$value: resourceName$
$value: url$
$value: content$
$value: activityId$
$value: postKind$
synonym commentActivityId$ activityId$
synonym postUrl$ url$ \ comment has postUrl$ instead of url$
64value: creationTime!
64value: updateTime!
value: author{}
value: album{}
value: media{}
value: location{}
value: link{}
value: resharedPost{}
value: poll{}
value: collectionAttachment{}
value: communityAttachment{}
field: comments[]
field: plusOnes[]
field: reshares[]
value: postAcl{} \ only for message, not for comment
}class
synonym resharedPost comments
synonym resharedPost-class comments-class
object class{ author
$value: resourceName$
$value: displayName$
$value: profilePageUrl$
$value: avatarImageUrl$
value: mapped-key
: dispose ( o:author -- )
addr resourceName$ $free
addr displayName$ $free
addr profilePageUrl$ $free
addr avatarImageUrl$ $free
dispose ;
}class
synonym plusOner author
synonym resharer author
synonym voter author
synonym owner author
synonym plusOner-class author-class
synonym resharer-class author-class
synonym voter-class author-class
synonym owner-class author-class
object class{ link
$value: title$
$value: url$
$value: imageUrl$
}class
object class{ plusOnes
value: plusOner{}
}class
object class{ reshares
value: resharer{}
}class
object class{ postAcl
value: collectionAcl{}
value: communityAcl{}
value: visibleToStandardAcl{}
value: isLegacyAcl?
value: isPublic?
}class
object class{ collectionAcl
value: collection{}
field: users[]
}class
object class{ communityAcl
value: community{}
field: users[]
}class
object class{ visibleToStandardAcl
field: users[]
field: circles[]
}class
object class{ circles
$value: resourceName$
$value: displayName$
$value: type$
}class
object class{ collection
$value: resourceName$
$value: displayName$
}class
synonym users collection
synonym community collection
synonym users-class collection-class
synonym community-class collection-class
object class{ album
field: media[]
}class
object class{ media
$value: resourceName$
$value: url$
$value: contentType$
$value: description$
$value: localFilePath$
value: width#
value: height#
}class
object class{ location
fvalue: latitude%
fvalue: longitude%
$value: displayName$
$value: physicalAddress$
}class
object class{ poll
field: choices[]
value: totalVotes#
$value: viewerPollChoiceResourceName$
}class
object class{ choices
$value: resourceName$
$value: description$
$value: imageUrl$
$value: imageLocalFilePath$
value: voteCount#
field: votes[]
}class
object class{ votes
value: voter{}
}class
object class{ collectionAttachment
$value: resourceName$
$value: displayName$
$value: permalink$
$value: coverPhotoUrl$
value: owner{}
}class
synonym communityAttachment collectionAttachment
synonym communityAttachment-class collectionAttachment-class
}scope
Variable authors#
Variable names#
Variable avatars[]
true Value first-key?
also g+
[IFDEF] dummy-key
$Variable entries[] \ list of google+ entries
require g+-import.fs
[THEN]
: dedup-author { a -- }
a @ >o
author:resourceName$ basename authors# #@ 0= IF
drop o { w^ x }
x cell author:resourceName$ basename authors# #!
x cell author:displayName$ names# #!
[IFDEF] dummy-key
key-author +avatar-author
[THEN]
ELSE
@ a !
author:dispose
THEN
o> ;
: dedup-authors ( o:comment -- )
addr comments:author{} dedup-author
comments:resharedPost{} ?dup-IF >o recurse o> THEN
comments:comments[] $@ bounds U+DO
I @ >o recurse o>
cell +LOOP
comments:plusOnes[] $@ bounds U+DO
I @ >o addr plusOnes:plusOner{} dedup-author o>
cell +LOOP
comments:reshares[] $@ bounds U+DO
I @ >o addr reshares:resharer{} dedup-author o>
cell +LOOP
comments:poll{} ?dup-IF
.poll:choices[] $@ bounds U+DO
I @ .choices:votes[] $@ bounds U+DO
I @ >o addr votes:voter{} dedup-author o>
cell +LOOP
cell +LOOP
THEN
comments:collectionAttachment{} ?dup-IF
>o addr collectionAttachment:owner{} dedup-author o>
THEN ;
: g+-scan ( -- ) iso-date
['] g+ >body to schema-scope
g+:comments-class to outer-class
['] g+:comments >body to schema-wid
['] dedup-authors is process-element ;
g+-scan
previous
\\\
Local Variables:
forth-local-words:
(
(("class{") definition-starter (font-lock-keyword-face . 1)
"[ \t\n]" t name (font-lock-function-name-face . 3))
(("}class") definition-ender (font-lock-keyword-face . 1))
)
forth-local-indent-words:
(
(("class{") (0 . 2) (0 . 2))
(("}class") (-2 . 0) (0 . -2))
)
End:
[THEN]