Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grading Vg image #359

Closed
wants to merge 20 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions learn-ocaml-client.opam
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ depends: [
"cmdliner"
"omd"
"asak"
"gg"
"vg"
"cohttp" {>= "1.0.0" & < "2.0.0"}
"cohttp-lwt-unix" {>= "1.0.0" & < "2.0.0"}
"ssl" {= "0.5.5"}
Expand All @@ -38,6 +40,9 @@ depends: [
"ppx_sexp_conv" {= "v0.9.0"}
"ppx_fields_conv" {= "v0.9.0"}
]
pin-depends: [
"vg.dev" "git+https://github.com/maiste/vg#ocaml_rendering"
]
build: [
["dune" "build" "@install" "-p" name "-j" jobs]
]
Expand Down
5 changes: 5 additions & 0 deletions learn-ocaml.opam
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,15 @@ depends: [
"pprint"
"ppx_cstruct"
"ppx_tools"
"re"
"uutf" {>= "1.0" }
"vg"
"yojson" {>= "1.4.0" }
"asak" {>= "0.1"}
]
pin-depends: [
"vg.dev" "git+https://github.com/maiste/vg#ocaml_rendering"
]
build: [
[make "static"]
["dune" "build" "-p" name "-j" jobs]
Expand Down
9 changes: 9 additions & 0 deletions learn-ocaml.opam.locked
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ depends: [
"base64" {= "2.3.0"}
"bigarray-compat" {= "1.0.0"}
"biniou" {= "1.2.1"}
"cairo2" {= "0.6.1"}
"checkseum" {= "0.1.0"}
"cmdliner" {= "1.0.4"}
"cohttp" {= "1.1.1"}
Expand All @@ -33,6 +34,7 @@ depends: [
"conduit" {= "1.3.0"}
"conduit-lwt" {= "1.3.0"}
"conduit-lwt-unix" {= "1.3.0"}
"conf-cairo" {= "1"}
"conf-git" {= "1.0"}
"conf-libssl" {= "1"}
"conf-m4" {= "1"}
Expand All @@ -43,12 +45,14 @@ depends: [
"decompress" {= "0.8.1"}
"digestif" {= "0.8.0-1"}
"dune" {= "2.0.1"}
"dune-configurator" {= "1.11.4"}
"easy-format" {= "1.3.2"}
"eqaf" {= "0.7"}
"ezjsonm" {= "1.1.0"}
"fieldslib" {= "v0.9.0"}
"fmt" {= "0.8.8"}
"fpath" {= "0.7.2"}
"gg" {= "0.9.3"}
"hex" {= "1.4.0"}
"ipaddr" {= "2.8.0"}
"jbuilder" {= "1.0+beta20.2"}
Expand All @@ -61,6 +65,7 @@ depends: [
"jsonm" {= "1.0.1"}
"logs" {= "0.7.0"}
"lwt" {= "4.2.1"}
"lwt_log" {= "1.1.1"}
"lwt_react" {= "1.1.3"}
"lwt_ssl" {= "1.1.3"}
"magic-mime" {= "1.1.2"}
Expand Down Expand Up @@ -110,8 +115,12 @@ depends: [
"uchar" {= "0.0.2"}
"uri" {= "1.9.7"}
"uutf" {= "1.0.2"}
"vg" {= "dev"}
"yojson" {= "1.7.0"}
]
pin-depends: [
"vg.dev" "git+https://github.com/maiste/vg#ocaml_rendering"
]
build: [
[make "static"]
["dune" "build" "-p" name "-j" jobs]
Expand Down
22 changes: 18 additions & 4 deletions src/app/dune
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,25 @@
ocplib_i18n)
)

(library
(name learnocaml_png_web)
(modes byte)
(implements learnocaml_png)
(libraries js_of_ocaml)
(modules Learnocaml_png)
(preprocess (pps js_of_ocaml.ppx)))

(executable
(name learnocaml_index_main)
(modes byte)
(flags :standard -warn-error -6-9-27-33-39)
(libraries ezjsonm
ace
sha
sha
learnocaml_repository
learnocaml_app_common
learnocaml_toplevel
learnocaml_png_web
js_of_ocaml.ppx
ocplib_i18n)
(modules Learnocaml_teacher_tab
Expand All @@ -52,10 +61,11 @@
(libraries ezjsonm
grading_jsoo
ace
sha
sha
learnocaml_repository
learnocaml_app_common
learnocaml_toplevel
learnocaml_png_web
js_of_ocaml.ppx
ocplib_i18n)
(modules Learnocaml_exercise_main)
Expand All @@ -71,10 +81,11 @@
(flags :standard -warn-error -9-27-33)
(libraries ezjsonm
ace
sha
sha
learnocaml_repository
learnocaml_app_common
learnocaml_toplevel
learnocaml_png_web
js_of_ocaml.ppx
ocplib_i18n)
(modules Learnocaml_playground_main)
Expand All @@ -93,6 +104,7 @@
ace
learnocaml_repository
learnocaml_app_common
learnocaml_png_web
lwt_react
js_of_ocaml.ppx
ocplib_i18n)
Expand All @@ -111,6 +123,7 @@
ace
learnocaml_repository
learnocaml_app_common
learnocaml_png_web
js_of_ocaml.ppx
ocplib_i18n)
(modules Learnocaml_description_main)
Expand All @@ -126,11 +139,12 @@
(modes byte)
(flags :standard -warn-error -9-27-33)
(libraries asak
ezjsonm
ezjsonm
grading_jsoo
ace
learnocaml_repository
learnocaml_app_common
learnocaml_png_web
lwt_react
js_of_ocaml.ppx
ocplib_i18n)
Expand Down
36 changes: 36 additions & 0 deletions src/app/learnocaml_png.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(* This file is part of Learn-OCaml.
*
* Copyright (C) 2019 OCaml Software Foundation.
* Copyright (C) 2016-2018 OCamlPro.
*
* Learn-OCaml is distributed under the terms of the MIT license. See the
* included LICENSE file for details. *)

open Js_of_ocaml
open Bigarray

let fill big_data data =
let dim = Array1.dim big_data in
let rec loop big_count data_count =
if big_count < dim then
begin
Dom_html.pixel_set data data_count big_data.{big_count};
Dom_html.pixel_set data (data_count+1) big_data.{big_count+1};
Dom_html.pixel_set data (data_count+2) big_data.{big_count+2};
Dom_html.pixel_set data (data_count+3) 255;
loop (big_count+3) (data_count+4)
end
else ()
in loop 0 0

let to_png_data big_data w h =
let canvas = Dom_html.createCanvas Dom_html.document in
canvas ##. width := w;
canvas ##. height := h;
let context = canvas ## getContext Dom_html._2d_ in
let image_data = context ## createImageData w h in
let data = image_data ##.data in
fill big_data data;
context ## putImageData image_data 0. 0.;
canvas##toDataURL_type (Js.string "image/png")
|> Js.to_string
108 changes: 68 additions & 40 deletions src/grader/dune
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
(flags :standard -w -37-41 -warn-error -27-39)
(modules Learnocaml_report)
(preprocess (pps ppx_ocplib_i18n))
(libraries ocplib-json-typed ocplib_i18n)
(libraries ocplib-json-typed
ocplib_i18n
vg
learnocaml_png)
)

(rule
Expand All @@ -24,7 +27,11 @@
learnocaml_ppx_metaquot_lib
ocplib-json-typed
learnocaml_report
learnocaml_repository)
learnocaml_repository
vg
gg
bigarray
vg.bigarray)
(modules Introspection_intf
Introspection
Test_lib
Expand All @@ -46,53 +53,72 @@
(run odoc html %{dep:test_lib.odoc} -o %{workspace_root}/_doc/_html)))
)



(rule
(targets embedded_cmis.ml)
(deps %{ocaml-config:standard_library}/array.cmi
%{ocaml-config:standard_library}/arrayLabels.cmi
%{ocaml-config:standard_library}/buffer.cmi
%{ocaml-config:standard_library}/bytes.cmi
%{ocaml-config:standard_library}/bigarray.cmi
%{ocaml-config:standard_library}/camlinternalFormatBasics.cmi
%{ocaml-config:standard_library}/camlinternalFormat.cmi
%{ocaml-config:standard_library}/camlinternalLazy.cmi
%{ocaml-config:standard_library}/camlinternalMod.cmi
%{ocaml-config:standard_library}/camlinternalOO.cmi
%{ocaml-config:standard_library}/compiler-libs/topdirs.cmi
%{ocaml-config:standard_library}/char.cmi
%{ocaml-config:standard_library}/complex.cmi
%{ocaml-config:standard_library}/digest.cmi
%{ocaml-config:standard_library}/filename.cmi
%{ocaml-config:standard_library}/format.cmi
%{ocaml-config:standard_library}/hashtbl.cmi
%{ocaml-config:standard_library}/int32.cmi
%{ocaml-config:standard_library}/int64.cmi
%{ocaml-config:standard_library}/lazy.cmi
%{ocaml-config:standard_library}/lexing.cmi
%{ocaml-config:standard_library}/list.cmi
%{ocaml-config:standard_library}/map.cmi
%{ocaml-config:standard_library}/marshal.cmi
%{ocaml-config:standard_library}/pervasives.cmi
%{ocaml-config:standard_library}/printexc.cmi
%{ocaml-config:standard_library}/printf.cmi
%{ocaml-config:standard_library}/queue.cmi
%{ocaml-config:standard_library}/random.cmi
%{ocaml-config:standard_library}/scanf.cmi
%{ocaml-config:standard_library}/set.cmi
%{ocaml-config:standard_library}/stack.cmi
%{ocaml-config:standard_library}/string.cmi
%{ocaml-config:standard_library}/sys.cmi
%{ocaml-config:standard_library}/uchar.cmi
%{ocaml-config:standard_library}/weak.cmi)
(action (with-stdout-to %{targets} (run ocp-ocamlres -format ocamlres %{deps})))
(deps
(:stdlib_cmis
%{ocaml-config:standard_library}/array.cmi
%{ocaml-config:standard_library}/arrayLabels.cmi
%{ocaml-config:standard_library}/buffer.cmi
%{ocaml-config:standard_library}/bytes.cmi
%{ocaml-config:standard_library}/bigarray.cmi
%{ocaml-config:standard_library}/camlinternalFormatBasics.cmi
%{ocaml-config:standard_library}/camlinternalFormat.cmi
%{ocaml-config:standard_library}/camlinternalLazy.cmi
%{ocaml-config:standard_library}/camlinternalMod.cmi
%{ocaml-config:standard_library}/camlinternalOO.cmi
%{ocaml-config:standard_library}/compiler-libs/topdirs.cmi
%{ocaml-config:standard_library}/char.cmi
%{ocaml-config:standard_library}/complex.cmi
%{ocaml-config:standard_library}/digest.cmi
%{ocaml-config:standard_library}/filename.cmi
%{ocaml-config:standard_library}/format.cmi
%{ocaml-config:standard_library}/hashtbl.cmi
%{ocaml-config:standard_library}/int32.cmi
%{ocaml-config:standard_library}/int64.cmi
%{ocaml-config:standard_library}/lazy.cmi
%{ocaml-config:standard_library}/lexing.cmi
%{ocaml-config:standard_library}/list.cmi
%{ocaml-config:standard_library}/map.cmi
%{ocaml-config:standard_library}/marshal.cmi
%{ocaml-config:standard_library}/pervasives.cmi
%{ocaml-config:standard_library}/printexc.cmi
%{ocaml-config:standard_library}/printf.cmi
%{ocaml-config:standard_library}/queue.cmi
%{ocaml-config:standard_library}/random.cmi
%{ocaml-config:standard_library}/scanf.cmi
%{ocaml-config:standard_library}/set.cmi
%{ocaml-config:standard_library}/stack.cmi
%{ocaml-config:standard_library}/string.cmi
%{ocaml-config:standard_library}/sys.cmi
%{ocaml-config:standard_library}/uchar.cmi
%{ocaml-config:standard_library}/weak.cmi)

(:local_cmis
../toplevel/.learnocaml_toplevel_pp.objs/byte/learnocaml_toplevel_pp.cmi)

(:lib_cmis
%{lib:re:re.cmi}
%{lib:gg:gg.cmi}
%{lib:vg:vg.cmi}
%{lib:vg:vgr_svg.cmi}))
(action
(with-stdout-to %{targets}
(run ocp-ocamlres -format ocamlres %{stdlib_cmis} %{local_cmis} %{lib_cmis}))
)
)

(library
(name embedded_cmis)
(wrapped false)
(modes byte)
(modules Embedded_cmis)
(libraries ocplib-ocamlres.runtime bigarray)
(libraries ocplib-ocamlres.runtime bigarray
learnocaml_toplevel_pp
vg gg vg.svg
re)
)

(rule
Expand Down Expand Up @@ -176,6 +202,7 @@
(name grader_jsoo_worker)
(modes byte)
(flags :standard -warn-error -9-27)
(link_flags :standard -linkall)
(libraries toploop_jsoo
grading
ezjsonm
Expand All @@ -185,6 +212,7 @@
ocplib_i18n
learnocaml_repository
learnocaml_report
learnocaml_png_web
jsutils
js_of_ocaml.ppx
grader_jsoo_messages)
Expand Down
Loading